Django:在model.objects.filter.update()中添加



我有一个带有表单的视图,我想根据用户输入更新模型的字段。我找不到做那件事的方法。在这种情况下,协调方式=+似乎不起作用。

这是我的观点:

def orders_on_the_way_edit2(request, Id):

OnOrder2 = get_object_or_404(table_on_order, Id=Id)
if request.method == 'POST':
form = OnOrderUpdateForm(request.POST, instance = OnOrder2)
if form.is_valid():

form.save()

quantity = form.cleaned_data.get('Quantity_received')
id = form.cleaned_data.get('Id')
update2 = table_on_order.objects.filter(Id = Id).update(Quantity_received =+ quantity)
update = table_on_order.objects.filter(Id = Id).update(StockOnOrder = (StockOnOrder - quantity))
messages.success(request, "Changed in order status successfully recorded")
return redirect('OnOrder2')
else:
form = OnOrderUpdateForm(initial = {
'Id' : OnOrder2.Id,
'StockOnOrder' : OnOrder2.StockOnOrder,
'Quantity_received' : OnOrder2.Quantity_received,
'OrderCompleted' : OnOrder2.OrderCompleted}, instance =OnOrder2)

return render(request, 'OnOrder2edit.html', {'form' : form}) 

线路:

update2 = table_on_order.objects.filter(Id = Id).update(Quantity_received =+ quantity)
update = table_on_order.objects.filter(Id = Id).update(StockOnOrder = (StockOnOrder - quantity))

update1quantity替换现有值,update2给我一个错误。

如有任何线索,我们将不胜感激!

在这种情况下,pytonic方式+=似乎不起作用。

,因为这毕竟是一个函数调用。Django不能改变Python的语言。但是它有一些对象,等等来更新字段。

正如.update(…)[Django-doc]文档中所解释的那样,您可以使用F-object[Django/doc]来引用字段,因此:

from django.db.models import F
update2 = table_on_order.objects.filter(Id=Id).update(
Quantity_received=F('Quantity_received') + quantity
)
table_on_order.objects.filter(Id=Id).update(
StockOnOrder=F('StockOnOrder') - quantity
)

您可以在此处组合两个查询,从而使用以下内容更新这两个字段:

from django.db.models import F
update = table_on_order.objects.filter(Id=Id).update(
Quantity_received=F('Quantity_received') + quantity,
StockOnOrder=F('StockOnOrder') - quantity
)

通过将两者结合起来,我们可以对数据库进行一次往返,而不是两次。

最新更新