Как получить и пк, и вход формы при отправке в Django
Я использую Django для создания системы, которая регистрирует доступные запасы магазина, а также регистрирует совершенные продажи. У меня есть кнопка "Продать товар" на каждом доступном товаре, так что продавец использует эту кнопку, чтобы записать, что была совершена продажа. Поэтому я запрашиваю pk (через url) товара, на котором была нажата кнопка (чтобы знать, какой товар продается), а также у меня есть форма, где продавец вводит количество продаваемого товара, чтобы я мог узнать, сколько товаров продается (я пытаюсь получить это с помощью метода GET). Но получаю ошибку, что quantity is None, так как не могу получить количество.
Это мой шаблон:
<td>
<form action="{% url 'stock:sell' pk=item.pk%}" method="GET">
<input type="number" id="quantity" value="1" size="5">
{% csrf_token %}
<button type="submit" name="submit">Sell</button>
</form>
</td>
Это мой url:
path('sell/<pk>/', sell, name='sell'),
Вот мои взгляды:
def sell(request, pk):
if request.method == 'GET':
quantity_sold = request.GET.get('quantity')
item = Item.objects.get(id=pk)
if quantity_sold > int(item.quantity):
messages.danger(request, "Not enough stock to sell that quantity!")
else:
item.quantity -= quantity
item.save()
return HttpResponseRedirect(reverse('stock:show_stock'))
Получаю количество, чтобы убедиться, что только доступное количество может быть продано, а затем обновляю базу данных (чтобы удалить товары, которые были проданы).
Получаю ошибку, говорящую, что quantity_sold является NoneType. Как мне решить эту проблему или какой есть более простой способ?
Попробуйте эту форму:
<form action="{% url 'stock:sell' pk=item.pk%}" method="GET">
<input type="number" name="quantity" id="quantity" value="1" size="5" required>
{% csrf_token %}
<button type="submit" name="submit">Sell</button>
</form>
Надеюсь, это сработает. Если нет, прокомментируйте
Поскольку вы отправляете данные, вы должны проверить request.POST для получения отправленных данных. Это должно быть:
if request.method == 'POST':
quantity_sold = request.POST.get('quantity') # or request.POST['quantity']
Когда вы получите форму-данные request.POST['quantity']
, это будет объект, и его ключевые значения будут "именами" полей ввода. Однако вы не задали никакого имени для input
<input type="number" name="quantity" id="quantity" value="1" size="5" required>