2

人々が私と同じことをするのを数回(1回、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

確かではありませんが、おそらく問題は がTempUserまだ作成されていないという事実にあります。

あなたができることの1つは、pre_save (ここを見てください)を使用する かpost_save、そこに の作成を配置することですBankAccount

または、実際に を使用して保存し、TempUser作成してcommit=FalseからBankAccount保存することもできますTempUser

于 2013-06-04T10:21:15.423 に答える
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 に答える