Python 如何对两个或多个相似的对象求和,如果存在新对象,如何防止创建新对象?德扬戈
我试着制作一个存储系统,有时两个相似的对象在两个不同的时间被输入,我必须求和这两个对象的数量,看起来像一个对象而不是两个不同的对象 例如,一周前我输入了这个数据Python 如何对两个或多个相似的对象求和,如果存在新对象,如何防止创建新对象?德扬戈,python,django,Python,Django,我试着制作一个存储系统,有时两个相似的对象在两个不同的时间被输入,我必须求和这两个对象的数量,看起来像一个对象而不是两个不同的对象 例如,一周前我输入了这个数据name=mouse,qnt=20,price=20,今天我添加了一个新的鼠标集合(与以前相同的鼠标)name=mouse,qnt=10,price=15每当我遇到类似的问题时,它就会自动求和数量=(30)和价格=(20+15)/2)而不是为第二个鼠标对象创建新对象 可能吗?或者还有其他类似的问题吗?! 这是我的模型 这是产品模型 cla
name=mouse,qnt=20,price=20
,今天我添加了一个新的鼠标集合(与以前相同的鼠标)name=mouse,qnt=10,price=15
每当我遇到类似的问题时,它就会自动求和数量=(30)和价格=(20+15)/2)而不是为第二个鼠标对象创建新对象
可能吗?或者还有其他类似的问题吗?!
这是我的模型
这是产品模型
class Products(models.Model):
name = models.CharField(max_length=20,unique=True)
qnt = models.IntegerField()
price = models.DecimalField(max_digits=20,decimal_places=3,null=True,blank=True)
def __str__(self):
return self.name
这是集合模型
class Collections(models.Model):
name = models.ForeignKey(Products, on_delete=models.CASCADE)
qnt = models.IntegerField()
price = models.DecimalField(max_digits=20,decimal_places=3,null=True,blank=True)
我不需要为集合中存在的相同产品创建新对象,我只需要求和数量?!
可能吗?谢谢,您可以覆盖模型的保存方法。例如:
class Products(models.Model):
name = models.CharField(max_length=20,unique=True)
qnt = models.IntegerField()
price = models.DecimalField(max_digits=20,decimal_places=3,null=True,blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
product = Products.objects.filter(name=self.name)
if product.count()>0:
product.quantity = product.quantity + self.quantity
product.price = (product.price + self.price)/2
product.save()
return
else:
super(Products, self).save(*args, **kwargs
我也考虑过了,我不确定我应该做什么逻辑!您是否有任何想法更新代码,我认为应该可以,但不确定,未测试:)。请试一试。我希望逻辑对您来说是清楚的。但是它仍然会创建新的对象,但是我们应该覆盖集合模型中的save方法。我认为您是对的,您也可以覆盖集合模型中的save方法。我认为应该行得通。