我的表单中包含初始值。我使用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>
答案 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)
这项工作一旦完成,您可能想考虑如果两个用户尝试一次预订同一辆车会发生什么情况。