django中admin后台的自定义检查

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并在浏览器其中路界面,输入数据测试我们定义的规则是否实现,结果如下图:

django中admin后台的自定义检查_第1张图片
image.png

你可能感兴趣的:(django中admin后台的自定义检查)