Django在admin中验证一个模型字段与另一个模型字段

时间:2014-05-25 03:20:14

标签: python django validation

假设模型有两个DateTimeFields:

class Tourney(models.Model):
    registration_deadline = models.DateTimeField()
    start_date = models.DateTimeField()

当用户尝试从Django管理员中提交Tourney时,如何在保存到数据库之前测试registration_deadline之前start_date,如果有错误,当然要通知用户内联,就像Django会有任何其他验证错误一样?

基本上,我正在寻找自定义管理验证。This部分Django文档很接近,但似乎是表单。如何进行“清理和验证相互依赖的字段”?来自Django的管理员?即使只是指向文档中正确位置的指针也足够了。

编辑:我认为它与validators有关,但他们似乎只能测试单个值,而不是同时测试两个...

1 个答案:

答案 0 :(得分:4)

from django import forms
from django.contrib import admin

from .models import Tourney


class TourneyAdminForm(forms.ModelForm):
    class Meta:
        model = Tourney

    def clean(self):
        if self.cleaned_data['registration_deadline'] > self.cleaned_data['start_date']:
            raise forms.ValidationError('Registration deadline must be before the start date')
        return self.cleaned_data


class TourneyAdmin(admin.ModelAdmin):
    form = TourneyAdminForm


admin.site.register(Tourney, TourneyAdmin)