2010-03-12 3 views
0

модели (пренебрежение опечаток/незначительные вопросы синтаксиса Это просто псевдо-код.):Django - транзакции в модели?

class SecretModel(models.Model): 
    some_unique_field = models.CharField(max_length=25, unique=True) # Notice this is unique. 

class MyModel(models.Model): 
    secret_model = models.OneToOneField(SecretModel, editable=False) # Not in the form 
    spam = models.CharField(max_length=15) 
    foo = models.IntegerField() 

    def clean(self): 
     SecretModel.objects.create(some_unique_field=self.spam) 

Теперь, если я иду сделать это:

MyModel.objects.create(spam='john', foo='OOPS') # Obviously foo won't take "OOPS" as it's an IntegerField. 
#.... ERROR HERE 
MyModel.objects.create(spam='john', foo=5) # So I try again here. 
#... IntegrityError because SecretModel with some_unique_field = 'john' 
already exists. 

Я понимаю, что я мог бы поставить это в представление с транзакция запроса вокруг него, но я хочу, чтобы это работало в Admin, а также через API и т. д. Не только с формами или представлениями. Как это возможно?

ответ

Смежные вопросы