Django 在管理中根据另一个模型字段验证一个模型字段

fil*_*d13 4 python django validation

假设一个模型有两个 DateTimeFields:

class Tourney(models.Model):
    registration_deadline = models.DateTimeField()
    start_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

当用户试图从Django管理内提交锦标赛,我怎么能测试registration_deadline是之前start_date保存到数据库之前,如果有错误,当然通知用户在线,就像Django的想,如果有任何其他验证错误?

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

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

cra*_*843 6

from django import forms
from django.contrib import admin

from .models import Tourney


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

    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)
Run Code Online (Sandbox Code Playgroud)