2012-09-26 15 views
10

Bir Django modelinin belirli bir alanı için kendi doğrulama rutinimi tanımlamak istiyorum. Hata iletisinin yönetici biçiminde görüntülenmesini istiyorum, ancak aynı porsiyonun, varlık kendi python koduyla kaydedilmiş olması durumunda da olmasını istiyorum. DRY ilkesini bozmadan bunu yapmak için bir yolu var mı?Modelde ve Yönetici'de Django alan doğrulaması var mı?

cevap

8

Bireysel bir alanı doğrulamak istiyorsanız, write a validator ürününü ve model alanınıza ekleyebilirsiniz.

Modelin full_clean yöntemi çağrıldığında, doğrulayıcı alan için çalıştırılacaktır. Bir model formu doğrulandığında (Django admin dahil) her zaman çalışır, ancak model örneği kaydedildiğinde otomatik olarak çalışmaz - python kodunda full_clean kodunu manuel olarak aramanız gerekir. Eğer modeli kaydedilir her çalışmasına doğrulayıcı zorlamak istiyorsa

m = MyModel(x=20) 
m.full_clean() # may raise ValidationError 
m.save() 

, o zaman tasarrufu yöntemi geçersiz olabilir ve orada full_clean arayın. Bu, model formlarını ve django yöneticisini kullanırken doğrulama işleminin iki kez çalıştırılmasına neden olacağını unutmayın.