2014-07-17 120 views
18

我有一個非常簡單的Django應用程序,用於記錄給我的同事的演講。由於它非常基本,我使用Django管理員本身。這裏是我的models.py:在Django中自定義驗證admin

#models.py 
from django.db import models 

class Lecture(models.Model): 
    topic = models.CharField(max_length=100) 
    speaker = models.CharField(max_length=100) 
    start_date = models.DateField() 
    end_date = models.DateField() 

我需要確保沒有人進入的管理形式結束日期開始日期,所以我在管理讀取自定義驗證Django文檔並實現在下面我的admin.py:

#admin.py 
from models import Lecture 
from django.contrib import admin 
from django import forms 


class LectureForm(forms.ModelForm): 
    class Meta: 
     model = Lecture 

     def clean(self): 
      start_date = self.cleaned_data.get('start_date') 
      end_date = self.cleaned_data.get('end_date') 
      if start_date > end_date: 
       raise forms.ValidationError("Dates are incorrect") 
     return self.cleaned_data 


class LectureAdmin(admin.ModelAdmin): 
    form = LectureForm 
    list_display = ('topic', 'speaker', 'start_date', 'end_date') 

admin.site.register(Lecture, LectureAdmin) 

然而,這有沒有影響任何對我的管理員,我能救講座,其中起始日期爲END_DATE後的圖像中看到:enter image description here

我在做什麼錯??

回答

14

您有一個縮進問題。您的clean方法在表單的Meta類中縮進。將它移回一級。另外,請確保return語句在方法內縮進。

+0

工作!! ..我幾乎花了2個小時重新閱讀文檔,以獲得修復它!..我有一個更多的懷疑..只有當我創建一個新的條目時驗證錯誤拋出。對於現有的,他們仍然在那裏......我假設只有當模型被保存時才調用clean()方法。我如何確保每次頁面加載時都調用它? – Amistad

+1

@Amistad只有當表單被提交時,纔會調用'clean'方法,而不是「保存模型時」(如果這就是你想要的模型的驗證:https://docs.djangoproject.com/en /1.7/ref/models/instances/#validating-objects)...每次頁面加載時,仍然不會驗證模型實例,但爲什麼你會想要這樣的「功能」? –

+0

嗯..現在我想起來了,我對模型的所有更改都只通過管理員通過form ..因此驗證檢查應該足夠了..謝謝.. – Amistad