2012-08-26 25 views
10

Modelimde bir django DateField kullanıyorum.Özel form olmadan Django model alan doğrulaması

class CalWeek(models.Model): 
    start_monday = models.DateField(verbose_name="Start monday") 

benim modelField özgü özel bir doğrulama yöntemi vardır: Ben aslında Pazartesi olduğundan emin olmak istiyorum. Şu anda yöneticiye özel bir ModelForm kullanmak için hiçbir nedenim yok - Django'nun ürettiği sadece iyi. Form sınıflarının sağladığı django clean_start_monday(self)1 şekerini kullanabilmem için özel bir form sınıfı oluşturmak biraz alan geçerliliği eklemek için çok fazla iş gibi görünüyor. Ben override the model's clean method yapabilir ve orada bir ValidationError yükseltebilir. Ancak, bu ideal değildir: bu hatalar alan dışı hatalar olarak tanımlanır ve problemli kullanıcı girişinin yanında değil, sayfanın en üstünde bulunur - ideal bir UX değildir.

Belirli bir model alanını doğrulamak ve hata iletinizi özel form sınıfı kullanmak zorunda kalmadan, yönetici alanındaki alanın yanında göstermenin kolay bir yolu var mı?

cevap

14

Django Doğrulayıcıları'na bakabilirsiniz.

https://docs.djangoproject.com/en/dev/ref/validators/

Daha sonra, dersten önce doğrulayıcı koymak Alanında doğrulayıcı kuracak.

def validate_monday(date): 
    if date.weekday() != 0: 
     raise ValidationError("Please select a Monday.") 

class CalWeek(models.Model): 
    start_date = models.DateField(validators=[validate_monday]) 
+0

Nice! Bunu nasıl gözden kaçırdığımı bilmiyorum. –

+0

Serin! Daha önce kullanmamıştım, ama bu .. çok temiz. Temiz doğrulayıcılar gönderin! –

İlgili konular