如果对象存在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_create
和 update_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.data
和 self.instance
来自 BaseModelForm
我为一家商店做了一个项目,我想防止重复的产品,如果产品不存在则将其插入数据库,否则如果不存在则只更新字段(数量)
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_create
和 update_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.data
和 self.instance
来自 BaseModelForm