Django - Отмена одной доставки, но при отмене одной доставки отменяются все доставки
Я пытаюсь отменить одну "размещенную" доставку, когда пользователь нажимает на кнопку "отменить", но он отменяет все размещенные доставки, ниже приведен views.py
def current_delivery_page(request):
deliveries = Delivery.objects.filter(
restaurant = request.user.restaurant,
status_of_delivery__in=[
Delivery.DELIVERY_DELIVERING,
Delivery.DELIVERY_POSTED
]
)
delivery = Delivery.objects.all()
for a in delivery:
if request.method == 'POST' and request.POST['receipt_number']:
a.status_of_delivery = Delivery.DELIVERY_CANCELLED
a.save()
return render(request, 'restaurant/deliveries.html',
{
"deliveries": deliveries
})
{% if d.status_of_delivery == 'posted' %}
<form method="POST">
{% csrf_token %}
<button type="submit" class="btn btn-danger"
name="update">Cancel</button>
<input type="hidden" value="{{ d.receipt_number }}"
name="receipt_number">
</form>
{% endif %}
Я хочу отменить одну доставку, а она автоматически переходит на страницу "Выполненные/отмененные доставки". Любая помощь будет принята с благодарностью, спасибо.
Необходимо проверить, равен ли receipt_numer из POST экземпляру доставки receipt_number
for a in delivery:
if request.method == 'POST' and request.POST['receipt_number'] == a.receipt_number:
a.status_of_delivery = Delivery.DELIVERY_CANCELLED
a.save()
вы перебираете все Delivery экземпляры в базе данных и устанавливаете все их статусы в DELIVERY_CANCELED в вашем for a in delivery цикле.
Вам нужно использовать Delivery.objects.get(pk=request.POST.get('receipt_number')) для получения нужного экземпляра доставки, а затем установить его статус на отмененный. Вы можете сделать что-то вроде этого:
if request.method == 'POST':
delivery = get_object_or_404(Delivery, pk=request.POST.get('receipt_number'))
if delivery:
delivery.status_of_delivery = Delivery.DELIVERY_CANCELED
delivery.save()