2016-04-13 23 views
0

Django Yönetici aracılığıyla düzenlenebilir amaçlanmıştır models.py basit bir model var varsayalım:Django modelindeki temiz yöntemin geçersiz kılması diğer doğrulamaları bozuyor mu?

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range') 

sorun: Yukarıdaki kod gt, bunu daha az daha lt olduğu varsayımını sağlamada büyük bir iş yok iken ayrıca Django'nun kutudan çıktığı diğer temel doğrulamaları da kırar. Örneğin, Django admin Bu alanlar için bazı sayısal olmayan veri girmek, ben birkaç ekranları yayılan ayıklama mesajları ile sunulan am:

enter image description here

ben tanımından overrided clean(self) yöntemini kaldırırsanız Range, bu temel doğrulamalar bir kez daha düzgün çalışmaya başlamak:

enter image description here

Ama tabii

, şimdi lt daha gt fazla olan Range s girebilirsiniz.

Gerçekten ben https://docs.djangoproject.com/en/1.9/ref/models/instances/#validating-objects

nerede hatadır göre, olsa ben sadece Django belgelerine aşağıdaki beri, yanlış yapıyorum bilmiyorum? Formum için doğrulama nasıl doğrulanır?

cevap

1

Önce ebeveyn clean yöntemi çalıştırabilirsiniz:

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     super(Range, self).clean() 

     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range') 
İlgili konular