2010-10-13 17 views
46

मेरे मॉडल में कुछ बूलियन फ़ील्ड हैं। मैंने इसे 3 सेट में तोड़ दिया है जिसे मैं MultipleChoiceField w/संशोधित CheckboxSelectMultiple के रूप में प्रस्तुत कर रहा हूं।Django: form.save() को ओवरराइड कैसे करें?

अब मुझे इस डेटा को डीबी में सहेजने की आवश्यकता है। यानी, मुझे एक एकल विजेट द्वारा कई बूलियन कॉलम में लौटाए गए डेटा को विभाजित करने की आवश्यकता है। मुझे लगता है कि यह save() विधि, संख्या के लिए उपयुक्त है?

प्रश्न यह है कि, मैं इसे कैसे कर सकता हूं? कुछ इस तरह?

def save(self, commit=True): 
    # code here 
    return super(MyForm, self).save(commit) 

यदि ऐसा है तो ... कैसे मैं मूल्यों को निर्धारित करते हैं?

self.fields['my_field'].value = 'my_flag' in self.cleaned_data['multi_choice'] 

या कुछ? संग्रहित सभी डेटा कहां है?

+0

या हो सकता है इस * * 'clean' में जाना चाहिए अगर मैं' cleaned_data' को संशोधित कर रहा हूँ ... – mpen

उत्तर

77

जगह आप अपने डेटा को संग्रहीत करने के लिए अपने नए मॉडल उदाहरण है:

def save(self, commit=True): 
    instance = super(MyForm, self).save(commit=False) 
    instance.flag1 = 'flag1' in self.cleaned_data['multi_choice'] # etc 
    if commit: 
     instance.save() 
    return instance 
संबंधित मुद्दे