假设模型有两个DateTimeFields:
class Tourney(models.Model):
registration_deadline = models.DateTimeField()
start_date = models.DateTimeField()
当用户尝试从Django管理员中提交Tourney时,如何在保存到数据库之前测试registration_deadline
之前start_date
,如果有错误,当然要通知用户内联,就像Django会有任何其他验证错误一样?
基本上,我正在寻找自定义管理验证。This部分Django文档很接近,但似乎是表单。如何进行“清理和验证相互依赖的字段”?来自Django的管理员?即使只是指向文档中正确位置的指针也足够了。
编辑:我认为它与validators有关,但他们似乎只能测试单个值,而不是同时测试两个...
答案 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)