Python 如果存在,则更新对象;如果不存在,则创建django

Python 如果存在,则更新对象;如果不存在,则创建django,python,django,Python,Django,如果不存在,我尝试创建新对象,如果存在,则更新一些字段。我已经看到了一些答案,但仍然不清楚,我无法很好地实现它 这是我的模特 class Information(models.Model): name = models.CharField(max_length=50,unique=True) def __str__(self): return self.name class Item(models.Model): item = models.Fore

如果不存在,我尝试创建新对象,如果存在,则更新一些字段。我已经看到了一些答案,但仍然不清楚,我无法很好地实现它 这是我的模特

class Information(models.Model):
    name = models.CharField(max_length=50,unique=True)

    def __str__(self):
        return self.name


class Item(models.Model):
    item = models.ForeignKey(Information,on_delete=models.CASCADE)
    quantity = models.IntegerField()
    quantity_storage = models.IntegerField(blank=True)
    buying_price = models.DecimalField(max_digits=30,decimal_places=3)

    def __str__(self):
        return self.item.name
   

    def save(self,*args,**kwargs):
        if self.item:
           Item.objects.filter(item__name=self.item).update(
               quantity=F('quantity') + self.quantity
                          
        else:
            super(Item,self).save(*args,**kwargs)
如果对象已经存在,我必须更新
数量
字段。例如,我输入了
项:cableXYZ,数量:10
,然后我用
数量:20
再次输入
cableXYZ
,它应该将
数量字段更新为30
这很好,但是当我尝试输入一个不存在的新对象时,它不会保存对象! 有什么我没有添加到save()方法的吗?!或者没有更好的方法来实现它,拜托?!
非常感谢您的帮助

我猜您想用您试图创建的
信息更新所有
项目
。我会这样做:

def save(self,*args,**kwargs):
    items = Item.objects.filter(item=self.item)
    if items: # if some items are found in the database
        items.update(quantity=F('quantity') + self.quantity)
    else:
        return super(Item,self).save(*args,**kwargs)

此外,我发现您的命名方案令人困惑,包含名为Item的ForeignKey信息的模型项会带来麻烦。

如果我没有弄错,if self.Item将始终为True。如果对象已经在数据库中,是否要创建()并更新它?非常感谢