我有一个带有表单的视图,我想根据用户输入更新模型的字段。我找不到做那件事的方法。在这种情况下,协调方式=+
似乎不起作用。
这是我的观点:
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))
update1
用quantity
替换现有值,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
)
通过将两者结合起来,我们可以对数据库进行一次往返,而不是两次。