2011-10-27 18 views
8

मैं समझता हूं कि डिफ़ॉल्ट रूप से, Django स्वचालित रूप से प्रारूप के साथ प्रतिपादन पर प्रत्येक फॉर्म फ़ील्ड के लिए आईडी स्वत: पॉप्युलेट करता है। कोई भी auto_id तर्क प्रदान करके प्रारूप को संशोधित कर सकता है, जो फ़ॉर्म कन्स्ट्रक्टर के मूल्य के रूप में एक अलग प्रारूप के साथ है।Django: फॉर्म फ़ील्ड स्तर पर डीओएम आईडी बदलें

यह वही नहीं है जो मैं ढूंढ रहा हूं। जो मैं पूरा करना चाहता हूं वह मेरे रूप में कई क्षेत्रों में से एक की आईडी बदल रहा है। इसके अलावा, समाधान form = MyForm(request.POST) के उपयोग को तोड़ना नहीं चाहिए।

पीएस। माईफॉर्म एक मॉडल रूप है, इसलिए प्रत्येक आईडी अपने संबंधित मॉडल फ़ील्ड से ली गई है।

मदद करने के लिए धन्यवाद।

+0

आप एक का उपयोग कर के साथ भाग मिल सकती है कक्षा? यह सुनिश्चित करना बहुत आसान और कम त्रुटि प्रवण है (बस विजेट को संशोधित करना है)। – sdolan

+0

@sdolan - मैं यह उल्लेख करना भूल गया कि यह प्रश्न मॉडल रूप के बारे में था। मैं मॉडल फ़ील्ड नाम बदलने के अलावा अन्य समाधान ढूंढ रहा हूं। – tamakisquare

+0

आपको नहीं करना होगा। जब आप 'मॉडलफॉर्म' बनाते हैं तो यह केवल फ़ील्ड के विजेट को अपडेट कर देगा। अगर यह काम करेगा, तो मैं एक उत्तर के रूप में एक पूर्ण समाधान पोस्ट करूंगा। – sdolan

उत्तर

15

रूपों ढांचा यहाँ लेबल उत्पन्न करने के लिए प्रकट होता है:

def _id_for_label(self): 
    """ 
    Wrapper around the field widget's `id_for_label` class method. 
    Useful, for example, for focusing on this field regardless of whether 
    it has a single widget or a MutiWidget. 
    """ 
    widget = self.field.widget 
    id_ = widget.attrs.get('id') or self.auto_id 
    return widget.id_for_label(id_) 
id_for_label = property(_id_for_label) 

तुम सिर्फ जो कुछ भी आप चाहते हैं, उनके लिए यह निर्धारित करने के लिए एक "आईडी" कुंजी के साथ अपने क्षेत्र विजेट आपूर्ति कर सकते हैं इसका मतलब है।

foo = forms.CharField(widget=forms.TextInput(attrs={'id': 'foobar'})) 

या इनिट को ओवरराइड करें और फॉर्म प्रारंभ करने के बाद एटर्स सेट करें।

मैं नहीं दिख रहा है कि यह कैसे Django के रूपों ढांचे के रूप में एक रूप को तोड़ सकते थे एचटीएमएल आईडी की कभी जानकारी नहीं है (कि डेटा सर्वर तक नहीं पहुंचेगी ...)

+2

यूजी - आप सही हैं। _id_ बदलना django के रूपों को ढीला नहीं करता है। मुझे HTML विशेषताएँ _name_ और _id_ मिश्रित मिला है। यह _name_ विशेषता है कि Django मॉडल के उदाहरण पर वापस एक फॉर्म मैपिंग पर निर्भर करता है। जवाब के लिए धन्यवाद। – tamakisquare

संबंधित मुद्दे