2014-05-25 105 views
1

假设一个模型有两个DateTimeFields:Django的验证一个模型场对另一个在管理

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

当用户试图从Django管理内提交锦标赛,我怎么能测试registration_deadlinestart_date前前保存到数据库,如果发生错误,当然会通知用户内联,就像Django会出现其他任何验证错误一样?

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

编辑:我想它是与validators,但他们似乎只能测试单个值,而不是两个在同一时间...

回答

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) 
+1

所以它所需要的是扩大基础ModelAdminForm。现在我明白了 :)。你甚至猜到了我已经拥有的TourneyAdmin的名字= P。感谢这样一个简单的答案! – fildred13

相关问题