2010-01-28 16 views
8

में केवल एक फ़ील्ड की आवश्यकता है वैसे भी एक क्षेत्र को सशर्त रूप से आवश्यक बनाने के लिए एक ही फॉर्म में एक और फ़ील्ड भर दिया गया है या नहीं?सशर्त रूप से Django मॉडल प्रपत्र

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

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

किसी भी जावास्क्रिप्ट समाधान के लिए नहीं लग रही। मुझे लगता है कि इसे django रूपों के साथ हल किया जाना चाहिए, लेकिन यह सुनिश्चित नहीं है कि इसके बारे में सबसे अच्छा कैसे जाना है।

उत्तर

9

अवहेलना .clean (स्वयं) विधि, self.cleaned_data के लिए जाँच करें और बढ़ा ValidationError

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

+0

नोट: उदाहरण के लिए: एक Django सीएमएस प्लगइन के लिए यह कर रहे हैं, तो बजाय forms.py की तुलना में, प्लगइन के लिए models.py परिभाषा साफ (स्वयं) विधि ओवरराइड करने के लिए सुनिश्चित करें। –

5

तुम भी यदि आप जानते हैं मान्यता इस वर्ग की सभी वस्तुओं पर लागू होगा इस मॉडल का उपयोग कर सकते हैं । फॉर्म स्तर पर नीचे का उपयोग करने के लिए, cleaned_data का उपयोग करें।

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

संदर्भ::

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 

संदर्भ:: Form & Field Validation

0

सबसे अच्छा समाधान Model Instance Clean, Django Validators

यहाँ एक रूपों उदाहरण है यहाँ Django प्रलेखन से एक नमूना सही ValidationError उपयोग कर रहा है सशर्त रूप से आवश्यक फ़ील्ड के लिए फॉर्म की साफ विधि को ओवरराइड करना और एरो पॉप अप करना है स्थिति पर आर।

clean(self): 
    if self.cleaned_data.get(some_field) == 1: 
     self.errors.pop(other_field, None) 
संबंधित मुद्दे