Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django def_在models.py中获取逻辑未找到对象_Python_Django_Django Models - Fatal编程技术网

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