2017-01-09 13 views
0

私はモデルPaymentとモデルInvoiceを持っています。モデル請求書の属性はpaymentで、OneToOneFieldフィールドはnull=Trueblank=Trueです。Djangoはオブジェクトを作成できません - RelatedObjectDoesNotExist

問題は、Djangoでは支払いを作成できないということです。

>>> Payment.objects.create(total_price=10) 

RelatedObjectDoesNotExist: Payment has no invoice. 

>>> Payment.objects.create(total_price=10,invoice=Invoice.objects.first()) 

TypeError: 'invoice' is an invalid keyword argument for this function 

なぜそうであるのか分かりません。 Paymentオブジェクトは入金後に作成されるため、Invoiceにはオプションの引数paymentを、逆の場合はその逆にします。

class Invoice(models.Model): 
    identificator = models.UUIDField(default=uuid.uuid4, editable=False) 
    order = models.OneToOneField('Job', related_name='invoice', on_delete=models.CASCADE) 
    price_per_word = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=12) 
    translator_revenue_in_percent = models.FloatField(null=True, blank=True) 
    discount_in_percent = models.FloatField(default=0) 
    final_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) 
    estimated_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) 
    paid = models.BooleanField(default=False) 
    payment = models.OneToOneField('Payment', related_name='invoice', null=True, blank=True) 
    __original_paid = None 

    def save(self, *args, **kwargs): 

     if not self.__original_paid and self.paid: 
      self.__original_paid = True 
      if self.order.translator: 
       EventHandler.order_has_been_paid(self.order) 

     super(Invoice, self).save(*args, **kwargs) 

class Payment(models.Model): 
    payment_identifier = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    total_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) 

    def save(self,*args,**kwargs): 
     EventHandler.order_has_been_paid(self.invoice.order) 
     super(Payment,self).save(*args,**kwargs) 

問題の原因はどこですか。

答えて

3

Paymentモデルのsaveメソッドをオーバーライドして、まだ保存されている支払いがないため明らかに存在しないself.invoiceにアクセスします。

関連する問題