【发布时间】:2020-11-08 20:47:57
【问题描述】:
每次使用此表单时,我都会得到 form.is_valid() == False 。当我做 print(form.errors) 我得到:
<ul class="errorlist"><li>reservation_code<ul class="errorlist"><li>Client with this Reservation code already exists.</li></ul></li></ul>
但表单的重点是通过输入现有的预订代码来获取预订的详细信息。那么如何更改此设置以使表单返回有效?
这里是视图:
def reservationView(request):
if request.method == "GET":
return render(request,'aplikacija/reservations.html')
else:
form = ReservationForm(request.POST)
if form.is_valid():
code = form.cleaned_data['reservation_code']
try:
client = Client.objects.filter(reservation_code=code)
tour = client.tour.destination
client.delete()
return render(request,'aplikacija/reservations.html',{'infoMsg':f'You have successfully cancelled your trip to {tour}'})
except:
form = ReservationForm()
return render(request,'aplikacija/cancelReservation.html',{'form':form,'infoMsg':'INVALID RESERVATION CODE'})
else:
form = ReservationForm()
print(form.errors)
return render(request,'aplikacija/cancelReservation.html',{'form':form,'infoMsg':'FORM INVALID'})
这是模型:
class Client(models.Model):
name = models.CharField(max_length=256)
surname = models.CharField(max_length=256)
email = models.CharField(max_length=256)
number_of_guests =models.IntegerField()
tour = models.ForeignKey(Tour,on_delete=models.CASCADE)
total_price = models.DecimalField(decimal_places=2,max_digits=15,default=0)
reservation_code = models.CharField(max_length=50,unique=True)
这是表单类:
class ReservationForm(forms.ModelForm):
class Meta:
model = Client
fields = ('reservation_code',)
widgets = {
'reservation_code':forms.TextInput(attrs={'class':'clientFormField'})
}
这是模板:
{% extends 'aplikacija/base.html' %}
{% block content %}
<h2 id="mostPopularTitle">Please enter your reservation code</h2>
<form method="POST" action="{% url 'reservation_details' %}" class="contactFormTab clientForm">
{{infoMsg}}
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn">Get reservation details</button>
</form>
{% endblock %}
有人知道为什么表单总是返回无效吗?
【问题讨论】:
-
您好,如果已经存在一个您正在保存的带有“reservation_code”的客户端,您是否签入了您的数据库?不要忘记您定义了 unique=True,这会创建约束唯一字段。
-
我没有保存,我只是检查预订代码是否存在,然后根据现有的预订代码获取客户详细信息。所以这不应该是一个冲突,虽然我把它是独一无二的
标签: django forms django-forms