1. 背景
在一个model中有2个field,分别时起始时间和结束时间,当我们在后台添加model示例,需要对起始时间以及结束时间进行判定,使得结束时间必须大于开始时间。
2. 代码
2.1 model
class Meeting(models.Model):
people_num = models.IntegerField(verbose_name='人数')
start_time = models.DateTimeField(verbose_name='开始时间')
end_time = models.DateTimeField(verbose_name='结束时间')
class Meta:
verbose_time = verbose_time_plural = '会议'
这是一个会议的模型类,其中包含人数,结束时间以及结束时间三个字段
2.2 form
class MeetingAdminForm(forms.ModelForm):
def clean(self):
start_time = self.cleaned_data.get('start_time')
end_time = self.cleaned_data.get('end_time')
if start_time > end_time:
raise forms.ValidationError('起始时间不能大于结束时间')
return self.cleaned_data
在form中,我们在clean函数中,我们先从form的cleaned_data(这是一个字典,里面存有你填入form中,并post的数据)中获得起始时间以及结束时间,然后对2这进行比较,当起始时间大于结束时间时,抛出forms.ValidationError这个错误。
2.3 admin
@admin.register(Meeting)
class MeetingAdmin(admin.ModelAdmin):
form = MeetingAdminForm
list_display = ['people_num', 'start_time', 'end_time']
admin中的代码比较简单,主要就是在admin中注册model,以及讲我们自定义的adminform赋值给admin的form字段。
3. 结果
我们运行python **.py runserver
并在浏览器其中路界面,输入数据测试我们定义的规则是否实现,结果如下图: