form.as_hidden不会将值传递给POST

时间:2019-04-10 10:10:47

标签: python django forms

我的表单中包含初始值。我使用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 %}

错误

<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 个答案:

答案 0 :(得分:1)

Django没有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)

这项工作一旦完成,您可能想考虑如果两个用户尝试一次预订同一辆车会发生什么情况。