2

我发现有好几次()人们做的事情和我一样:

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
4

4 回答 4

3

您可以更改您的 TempUser 模型

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

或将您的条件更改为:

if not hasattr(self, 'bank_account'):
于 2013-06-04T10:21:42.757 回答
0

我不确定您为什么认为这些链接中的任何一个都是相关的。他们都访问模型上的普通字段 - id 和 char 字段。您正在访问一个 ForeignKey,它当然是对可能存在或不存在的另一个模型实例的引用。在你的情况下,它显然不存在。

最简单的方法是检查 FK id 而不是实际对象:

    if not self.bank_account_id:
        bank_account = BankAccount()
        bank_account.save()
        self.bank_account = bank_account
于 2013-06-04T10:23:19.060 回答
0

不确定,但问题可能在于TempUser尚未创建。

您可以做的一件事是使用pre_save (看这里)post_saveBankAccount.

或者你可以实际保存TempUserwith commit=False, crete theBankAccount然后保存TempUser

于 2013-06-04T10:21:15.423 回答
0

好像bank_account没有创建。你有任何必填字段BankAccount吗?

于 2013-06-04T10:56:37.837 回答