如果对象存在django,如何更新(计算)特定字段

how to update(calculate) a specific field if the object exists django

我为一家商店做了一个项目,我想防止重复的产品,如果产品不存在则将其插入数据库,否则如果不存在则只更新字段(数量)

models.py

class Item(models.Model):
    item = models.ForeignKey(Product,on_delete=models.CASCADE)
    quantity = models.IntegerField()

例如我们插入了这个数据:

 item = mouse , quantity = 20 

然后我们稍后添加此数据

 item = mouse , quantity = 30

现在只要物品存在,我就会尝试这样做,只需像这样更新数量 (20 + 30) = 50,将之前的数量与新数量相加以获得总数量!请问有可能吗? 我已经阅读了一些关于 get_or_createupdate_or_create 的文章,但我仍然不知道它在我的案例中是如何工作的!?

views.py

def createNewProduct(request):
   form = ItemForm()
   if request.method == 'POST':
       form = ItemForm(request.POST)
       if form.is_valid():           
            form.save()

   return render(request,'temp/add_item.html',{'form':form})

forms.py

class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['item','quantity']

感谢您的建议 问候..

首先,你可以使用update_or_create。但是,如果您执行 PUT,此方法将覆盖您的当前数据。你的quantity会被覆盖,不会像这样quantity+=new_quantity.

因此,您必须在 ItemForm doc

中覆盖 save()
def save(self, *args, **kwargs):
    if self.instance is None
       # custom POST operation or `return super().save(*args, **kwargs)`
    else:   
       self.instance.quantity = self.instance.quantity + self.cleaned_data.get('quantity')
       # further PUT operation
       instance.save()
    ...

self.dataself.instance 来自 BaseModelForm