我正在保存表单中的另一个模型,但更新不会保存到数据库中。
if request.method == 'POST':
form = InventoryTransactionForm(request.POST, instance=InventoryTransaction())
if form.is_valid():
quantity = request.POST['quantity']
part_id = request.POST['part_id']
item_template_id = request.POST['supply']
try:
item_object = Item.objects.get(pk=part_id)
masterQty = item_object.masterQty - int(quantity)
item_object.save(force_update=True)
except Exception, e:
messages.error(request, e.message)
任何人都可以帮助上面代码中的错误,谢谢。
编辑:更新的代码如下
@transaction.commit_manually
def post(self, request, *args, **kwargs):
if request.method == 'POST':
form = InventoryTransactionForm(request.POST, instance=InventoryTransaction())
if form.is_valid():
quantity = request.POST['quantity']
part_id = request.POST['part_id']
item_template_id = request.POST['supply']
try:
item_object = Item.objects.get(pk=part_id)
masterQty = item_object.masterQty - int(quantity)
item_object.save(force_update=True)
transaction.commit()
except Exception, e:
transaction.rollback()
messages.error(request, e.message)
form.save(True)
答案 0 :(得分:0)
您在save方法中使用force_update=True
。来自文档:
在极少数情况下,必须能够强制save()方法执行SQL INSERT而不是回退到执行UPDATE。反之亦然:如果可能,请更新,但不要插入新行。在这些情况下,您可以将force_insert = True或force_update = True参数传递给save()方法。显然,传递这两个参数是一个错误:你不能同时插入和更新!
您是第一次将对象保存到数据库中,因此调用force_update=True
没有意义,因为它会阻止首先创建对象。所以改变
item_object.save(force_update=True)
到
item_object.save()
答案 1 :(得分:0)
我认为你的问题是在这里使用django ORM
您可以在此处从数据库中获取对象:item_object = Item.objects.get(pk=part_id)
但在执行item_object = Item(masterQty=masterQty, item_template_id=item_template_id, id=part_id)
时会丢失此对象的实例。
这就是为什么你认为你需要强制更新,但实际上你只需要保留对象的正确实例。
为什么不直接更新数据库中的对象上的字段然后保存? 像这样:
item_object = Item.objects.get(pk=part_id)
item_object.masterQty -= int(quantity)
item_object.item_template_id = item_template_id
item_object.save()
您甚至不需要强制更新,因为您正在处理从数据库获得的实例。