我已经创建了一个预约系统,但是我希望在它到达create预订对象之前避免任何过去的日期被预订,然后将其保存到数据库中。
这是我的views.py
BookingView类(视图):
def get(self, request, *args, **kwargs):
return render(request, "availability.html")
def post(self, request, *args, **kwargs):
form = AvailabilityForm(request.POST)
if form.is_valid():
data = form. cleaned_data
bookingList = Appointment.objects.filter(start__lt=data['end_time'], end__gt=data['start_time'])
if not bookingList:
booking = Appointment.objects.create(
name=data["name"],
email=data["email"],
start=data["start_time"],
end=data["end_time"]
)
booking.save()
return render(request, "success.html", {
"booking":booking
},)
else:
name = data["name"]
return render(request, "booked.html",{
"name":name,
},)
发布于 2022-01-11 10:20:39
您可以向日期字段添加一个额外的验证,如下所示:
from django.utils import timezone
class AvailabilityForm(forms.Form):
# ... the fields
def clean_start_time(self)
start = self.cleaned_data.get('start_time')
if start < timezone.now():
raise forms.ValidationError('the date must be after now.')
return data
可以在https://docs.djangoproject.com/en/4.0/ref/forms/validation/#cleaning-a-specific-field-attribute上获得更多信息
接下来,只需重写视图并将表单发送到模板即可显示这些错误,如本文档中所解释的:
https://stackoverflow.com/questions/70671189
复制