bugfix> python > 投稿

フィールドを保存しようとしています profit モデルに ItemSold

私は取得する必要があります purchase_price 前から Item 保存するためのモデル profit の中に def get_profit の機能 ItemSold モデル( OneToOneItem )。

ザ・ def_get_profit にあります models.py 現時点では、レコードの表示/編集にDjango管理ダッシュボードのみを使用しているためです。

私は DoesNotExist 明らかに原因となっているエラー purchase_price = Item.objects.get(id=self.id).purchase_price 削除すると機能します。

誰かが私に理由を理解するのを手伝ってくれたらありがたいです id=self.id を認識していません Item.object 問題の。

models.py

class Item(models.Model):
    name = models.CharField(max_length=200, null=True)
    purchase_price = models.FloatField(null=True)
    def __str__(self):
        return f'{self.name}'
class ItemSold(models.Model):
    sold_price = models.FloatField(null=True)
    profit = models.FloatField(null=True, blank=True)
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    @property
    def get_profit(self):
        purchase_price = Item.objects.get(id=self.id).purchase_price
        sold_price = float(self.sold_price)
        fees = float((sold_price * 0.09) + (0.9))
        profit = float(sold_price - purchase_price - fees)
        return profit
    def save(self, *args, **kwargs):
        self.profit = self.get_profit
        super(ItemSold, self).save(*args, **kwargs)
    def __float__(self):
        return self.profit
    def __str__(self):
        return f'{self.profit}'

回答 1 件
  • 交換してみてください:

    purchase_price = Item.objects.get(id=self.id).purchase_price
    
    

    と:

    purchase_price = Item.objects.get(id=self.item.id).purchase_price
    
    

    self.idが機能しない理由は、この場合、selfがItemSoldを参照しているためです。あなたの中にいる間 Item.objects あなたがしたい Item のID。

    たとえば、 ItemSold これまでに販売された4番目のアイテムです。しかし、それは最初です Item データベース内。取得したい Item のID Item.objedcts.get

あなたの答え