【发布时间】:2021-08-11 22:52:40
【问题描述】:
我正在尝试覆盖我的 forms.py 中的保存方法,我必须防止创建重复的对象,如果对象存在只更新一些字段
class Item(models.Model):
item = models.ForeignKey(Product,on_delete=models.CASCADE)
quantity = models.IntegerField()
例如,如果我之前输入了此数据:item = XYZ , quantity = 100 我想阻止创建另一个 XYZ 项目,我只想更新数量,例如我将输入此数据item = XYZ , quantity = 200 我试图阻止创建这个重复的数据,我只是尝试更新数量previous quantity + new quantity100 + 200 = 300我必须更新quantity to 300为此我覆盖save()在我的forms.py
class ItemForm(forms.ModelForm):
class Meta:
model = Item
fields = ['item','quantity']
def save(self,*args,**kwargs):
if self.instance.item is None: #i also tried this if not self.instance.item
return super().save(*args,**kwargs)
else:
Item.objects.filter(item__name=self.instance.item).update(
quantity=F('quantity') + self.instance.quantity)
我的意见.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})
但它只在它存在时更新,如果不存在它不会创建任何新对象,如果它不存在,我希望创建新对象,请问有没有办法实现它?还是我没有错?
【问题讨论】: