Python Django def_在models.py中获取逻辑未找到对象
我正在尝试将一个字段Python Django def_在models.py中获取逻辑未找到对象,python,django,django-models,Python,Django,Django Models,我正在尝试将一个字段利润保存到模型项目销售 我需要从以前的项目模型中获取购买价格,以便在项目销售模型中的定义获取利润功能中保存利润(OneToOne带项目) def_get_price位于models.py中,因为我目前只使用Django管理仪表板查看/编辑记录 我得到了DoesNotExist错误,这显然是由purchase\u price=Item.objects.get(id=self.id).purchase\u price引起的,因为当我删除它时,该函数可以工作 如果有人能帮助我理解为
利润
保存到模型项目销售
我需要从以前的项目
模型中获取购买价格
,以便在项目销售
模型中的定义获取利润
功能中保存利润
(OneToOne
带项目
)
def_get_price
位于models.py
中,因为我目前只使用Django管理仪表板查看/编辑记录
我得到了DoesNotExist
错误,这显然是由purchase\u price=Item.objects.get(id=self.id).purchase\u price
引起的,因为当我删除它时,该函数可以工作
如果有人能帮助我理解为什么id=self.id
无法识别所讨论的Item.object
,我将不胜感激
型号.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}'
尝试替换:
purchase_price = Item.objects.get(id=self.id).purchase_price
与:
self.id不起作用的原因是,在本例中,self指的是ItemSeld。在项.objects
中时,您希望拥有项的id
例如,您的itemsaled
是迄今为止售出的第四件商品。但是,它是数据库中的第一个项。您想在Item.objedcts.get
中获取Item
的id,很抱歉与主题完全无关,但是在模型方法上使用@property有什么好处?(我很好奇,因为我从未使用过它)@RicardoVilaça我刚从我正在工作的另一个项目中复制了这段代码,但忘了取下它,但我不确定它有什么好处..我现在要看看是否有..@RicardoVilaça你可能会发现这很有趣,但是当我删除@property时,我得到了错误float()参数必须是字符串或数字,而不是“方法”
嘿,谢谢你的建议。它是有效的:)这是因为self.id
没有找到特定的对象
,然后通过添加项
解决了这个问题。嗨,我更新了我的答案,并做了简短的解释。这有意义吗?是的,我就是这么想的。太好了,谢谢。
purchase_price = Item.objects.get(id=self.item.id).purchase_price