2014-05-25 101 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

相關問題