2013-06-04 2 views
2

Я нашел несколько раз (one, two), что люди делают то же самое, что я делаю:Джанго модели сохранение self.field.rel.to.DoesNotExist

class TempUser(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 
    bank_account = models.ForeignKey(BankAccount) 

    def save(self, *args, **kwargs): 
     if not self.bank_account: 
      bank_account = BankAccount() 
      bank_account.save() 
      self.bank_account = bank_account 
     super(TempUser, self).save(*args, **kwargs) 

Но я получил следующее исключение:

File "models.py", line 134, in main 
    fill_predefined_data() 
    File "models.py", line 121, in fill_predefined_data 
    user.save() 
    File "models.py", line 41, in save 
    if not self.bank_account: 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 343, in __get__ 
    raise self.field.rel.to.DoesNotExist 
__main__.DoesNotExist 

ответ

0

Не уверен, но, вероятно, проблема в том, что TempUser еще не создан.

Одна вещь, которую вы можете сделать, это использовать pre_save(look here) или post_save и положить туда создание BankAccount.

или вы можете сохранить TempUser с commit=False, Крит BankAccount, а затем сохранить TempUser

3

Вы можете либо изменить вашу модель TempUser

bank_account = models.ForeignKey(BankAccount, null=True) 

или изменить условие:

if not hasattr(self, 'bank_account'): 
0

Я не уверен, почему вы думаете, что любая из этих ссылок релевантна. Оба они получают доступ к нормальным полям в полях model - id и char. Вы обращаетесь к ForeignKey, который, конечно же, является ссылкой на другой экземпляр модели, который может существовать или не существовать. В вашем случае это явно не существует.

Проще всего сделать это, чтобы проверить на FK идентификатор, а не фактический объект:

if not self.bank_account_id: 
     bank_account = BankAccount() 
     bank_account.save() 
     self.bank_account = bank_account 
0

Похож bank_account не создаются. У вас есть обязательные поля в BankAccount?

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