Как получить и пк, и вход формы при отправке в 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>
Вернуться на верх