Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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 如何对两个或多个相似的对象求和,如果存在新对象,如何防止创建新对象?德扬戈_Python_Django - Fatal编程技术网

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方法。我认为应该行得通。