【发布时间】:2019-06-12 18:18:51
【问题描述】:
我想验证我正在更新TimesheetEntry 模型的表单。我想检查timesheet_clock_out_date 和timesheet_clock_out_time 是否不小于timesheet_clock_in_date 和timesheet_clock_in_time。如果是,则引发错误“请输入正确的日期”。在我的网址中,我发送 primary key 的 TimesheetEntry
urls.py
path('useradmin/timesheet/clock-out/<int:pk>', views.ClockOutAddView.as_view(), name='admin_timesheet_clock_out'),
Forms.py
class ClockOutForm(forms.ModelForm):
class Meta:
model = TimesheetEntry
fields = [
'timesheet_clock_out_date',
'timesheet_clock_out_time',
]
模型.py
class TimesheetEntry(models.Model):
timesheet_users = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_users')
timesheet_clock_in_date = models.DateField()
timesheet_clock_in_time = models.TimeField()
timesheet_clock_out_date = models.DateField(blank=True, null=True)
timesheet_clock_out_time = models.TimeField(blank=True, null=True)
Views.py
class ClockOutAddView(LoginRequiredMixin, generic.View):
template_name = 'admin/clock/clock_form.html'
success_url = '/useradmin/timesheet/'
def get(self, request, pk, *args, **kwargs):
form = ClockOutForm(instance=TimesheetEntry.objects.get(id=pk))
return render(request, self.template_name, {'form': form})
def post(self, request, pk, *args, **kwargs):
form = ClockOutForm(request.POST, instance=TimesheetEntry.objects.get(id=pk))
if form.is_valid():
form.save()
return HttpResponseRedirect(self.success_url)
return render(request, self.template_name, {'form': form})
如何验证日期和时间。
【问题讨论】:
-
验证由 form 完成,因此
form.is_valid将失败。话虽如此,我认为您最好使用UpdateView(docs.djangoproject.com/en/2.1/ref/class-based-views/…),并使用DateTimeFields 而不是单独的DateField和TimeFields。
标签: django django-models django-forms django-templates django-views