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을 생성하는 것입니다.

또는 당신이 실제로 저장할 수 있습니다 다음 BankAccount와는 TempUser

3

을 저장 TempUsercommit=False, 크레타와 함께 당신은 당신의 TempUser 모델

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

을 변경하거나 당신의 상태를 변경할 수 있습니다 중 하나

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

왜 그 링크 중 하나가 적합하다고 생각하는지 잘 모르겠습니다. 둘 다 모델의 일반 필드 (id 및 char 필드)에 액세스합니다. ForeignKey에 액세스하고 있습니다. 물론 이것은 존재할 수도 있고 존재하지 않을 수도있는 다른 모델 인스턴스에 대한 참조입니다. 귀하의 경우에는 분명히 존재하지 않습니다.

가장 쉬운 것은 FK 아이디가 아닌 실제 개체를 확인하는 것입니다 bank_account가 만들어지지 않습니다처럼

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

보인다. BankAccount에 필수 입력란이 있습니까?

관련 문제