#python #django
#python #django
Вопрос:
У меня есть это представление, которое имеет форму, и я хочу обновить поле модели на основе пользовательского ввода. Я не могу найти способ сделать это. Похоже, что способ =
pythonic в этой ситуации не работает.
Вот мое мнение:
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
выдает ошибку.
Любая подсказка по этому поводу будет оценена!
Ответ №1:
Похоже, что способ
=
pythonic в этой ситуации не работает.
Нет, поскольку это, в конце концов, вызов функции. 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
)
комбинируя два, мы, таким образом, совершаем один обратный переход к базе данных вместо двух.