2014-07-17 14 views
18

Meslektaşlarıma verilen dersleri kaydetmek için çok basit bir Django uygulamasına sahibim. Çok basittir, Django yöneticisinin kendisini kullanıyorum. İşte benim models.py geçerli:Django yöneticisinde özel doğrulama

kimsenin yönetici formlarda bitiş tarihinden sonra başlangıç ​​tarihini girmemesini sağlamak için gereken
#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() 

, bu yüzden yönetici özel doğrulama için Django dokümanlar okuyun ve aşağıdaki uygulamaya benim admin.py: Ancak

#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) 

, bu benim yönetici üzerinde hiçbir etkisi yoktur ve resimde görüldüğü gibi START_DATEEND_DATE sonradır dersleri kaydetmek mümkün duyuyorum: enter image description here

yanlış yapıyorum ??

cevap

14

Girinti sorununuz var. clean yönteminiz, formun Meta sınıfı içinde girintilidir. Bir seviye geri taşı. Ayrıca, yöntem içinde return ifadesinin girintili olduğundan emin olun.

+0

bu işe yaradı! .. ve neredeyse 2 saatlik bir düzeltme elde etmek için dokümanlar okumaya harcadım! .. Bir kez daha şüphe ettim ... doğrulama hatası sadece yeni bir giriş oluşturduğumda atıldı. Mevcut olanlar için orada kalmaya devam ettiler .. clean() yönteminin yalnızca bir model kaydedildiğinde çağrıldığını varsayalım. Sayfa her yüklendiğinde bunun çağrıldığından emin olabilir miyim? – Amistad

+1

@Amistad "Temiz" yöntemi yalnızca form gönderildiğinde, "model kaydedildiğinde" değil çağrılır (modelinizin geçerliliğini arıyorsanız bunu yapınız: https://docs.djangoproject.com/en /1.7/ref/models/instances/#validating-objects) ... Model örneklerinizi "sayfa her yüklendiğinde" doğrulamayacak ancak niçin böyle bir "özellik" istiyorsunuz? –

+0

hmm..bunu düşündüğümde, modelde yaptığım tüm değişiklikler sadece form aracılığıyla yönetici aracılığıyla gerçekleşir .. bir doğrulama kontrolü yeterli olmalıdır .. teşekkürler .. Teşekkürler .. – Amistad