2010-01-28 24 views
8

Yine aynı formdaki başka bir alanın doldurulup doldurulmadığına bağlı olarak bir koşullu olarak koşullu hale getirme neyse? Koşullu Olarak Django Model Formunda Yalnızca Bir Alan Gerekir


If field1 has no data and field2 has no data 
    form is invalid 

If field1 has no data, but field2 does 
    form is valid. 

herhangi bir javascript çözümler arıyor değil. Ben django formları ile çözülmelidir gibi hissediyorum, ama bu konuda en iyi nasıl emin değilim.

cevap

9

geçersiz kılma .clean (öz) yöntemi, ValidationError

https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

self.cleaned_data denetlemek ve yükseltmek doğrulama bu sınıfın tüm nesneler için geçerli olacaktır biliyorsanız da bu modeli kullanarak yapabilirsiniz
+0

Not: Örneğin bir Django CMS eklentisi için bunu ise oldukça forms.py daha, eklenti için models.py tanımında temiz (öz) yöntemini geçersiz kılmak için emin olun. –

5

. Aşağıdakileri form düzeyinde kullanmak için, clean_data kullanın.

class Article(models.Model): 

    status = models.CharField(max_length=75, blank=False, null=False) 
    pub_date = models.CharField(max_length=75, blank=False, null=False) 

    def clean(self): 
     # Don't allow draft entries to have a pub_date. 
     if self.status == 'draft' and self.pub_date is not None: 
      raise ValidationError('Draft entries may not have a publication date.') 
     # Set the pub_date for published items if it hasn't been set already. 
     if self.status == 'published' and self.pub_date is None: 
      self.pub_date = datetime.date.today() 

Referans:

class SimpleForm(forms.ModelForm): 

    def clean(self): 
     cleaned_data = super(SimpleForm, self).clean() # Get the cleaned data from default clean, returns cleaned_data 
     field1 = cleaned_data.get("field1") 
     field2 = cleaned_data.get("field2"), 

     if not field1 and not field2: 
      raise forms.ValidationError('Please fill in both fields.') 

     return cleaned_data 

Referans: Form & Field Validation

0

iyi çözüm Model Instance Clean Burada

Django Validators bir form örneğidir İşte ValidationError kullanarak Django belgelerine bir örnek haktır Koşullu olarak gerekli alan, formun temiz yöntemini geçersiz kılmak ve erroyu açmaktır koşulu var.

clean(self): 
    if self.cleaned_data.get(some_field) == 1: 
     self.errors.pop(other_field, None) 
İlgili konular