form.as_hidden не передает значения в POST - PullRequest
0 голосов
/ 10 апреля 2019

Моя форма содержит начальные значения. Я использую form.as_hidden, чтобы скрыть значения и передать эти значения через запрос POST. Однако скрытые значения не проходят. Есть ли способ через это?

views.py

def car_detail_view(request, id):
if request.method == "POST":
    form = CarForm(request.POST)
    print(form.is_valid())
    if form.is_valid():
        car_save = form.instance
        get_car = Car.objects.get(number_plate=car_save.number_plate)
        get_car.available = False
        get_car.save()
        return redirect('/')
    else:
        print(form.errors)
else:
    car = Car.objects.get(id=id)
    form = CarForm(initial={'brand':car.brand, 'number_plate':car.number_plate, 'price':car.price,
                        'available':car.available})
    args = {
        'car':car,
        'form':form
    }
return render(request, 'map/confirmation.html', args)

confirmation.html

<h1>Confirmation of Booking</h1>
{% block content %}
<p>Brand: {{ car.brand }}</p>
<p>Number Plate: {{ car.number_plate }}</p>
<p>Price: {{ car.price }}</p>
<p> Are you sure you want to book? <p>
<form class="" method="post">
  {% csrf_token %}
  {{ form.as_hidden }}
  <input type="submit" value="Book {{ car.brand }}">
</form>
{% endblock %}

Error

<ul class="errorlist"><li>brand<ul class="errorlist"><li>This field is required.</li></ul></li><li>number_plate<ul class="errorlist"><li>This field is required.</li></ul></li><li>price<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

1 Ответ

1 голос
/ 10 апреля 2019

У Джанго нет метода form.as_hidden.Поэтому {{ form.as_hidden }} будет отображаться как пустая строка '' в вашем шаблоне.

Вы можете использовать метод as_hidden для отдельных полей формы.

{{ form.number_plate.as_hidden }}

Если вы используете значения изскрытые поля, вам может потребоваться добавить код, чтобы пользователь не мог изменять значения полей (например, с помощью инструментов разработчика своего браузера).Тем не менее, в вашем случае вам не нужно получать значения из формы, вы можете получить их из базы данных.

def car_detail_view(request, id):
    if request.method == "POST":
        car = Car.objects.get(id=id)
        car.available = False
        car.save()
        return redirect('/')
    else:
        car = Car.objects.get(id=id)
        args = {
            'car':car,
        }
        return render(request, 'map/confirmation.html', args)

После того, как вы все заработаете, вы можете подумать о том, чтопроисходит, если два пользователя пытаются забронировать один и тот же автомобиль одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...