2009-04-09 3 views
11

मेरे पास एक चेकबॉक्स चयन करें एकाधिक फ़ील्ड, मैं एकल विकल्पों पर फिर से क्यों नहीं चल सकता?चेकबॉक्स में चयन करें Illult

यह काम नहीं करता:

{%for choice in form.travels.choices%} 
    {{choice}} 
    {%endfor%} 

यहां तक ​​कि निर्दिष्ट करने {{choice.0}} मदद नहीं करता है, मैं कैसे ऐसा कर सकता है?

धन्यवाद

उत्तर

29

टेम्पलेट के अंदर, travels क्षेत्र के रूप में वास्तव में BoundField का एक उदाहरण (जो एक Django उद्देश्य यह है कि एक साथ बांधता क्षेत्र और प्रतिपादन के लिए अपने मूल्य है)। इसका मतलब है कि गुण कुछ अलग हैं।

एक टपल के रूप में विकल्प से अधिक पुनरावृति करने के लिए:

{% for choice in form.travels.field.choices %} 
    {{ choice }} - 
{% endfor %} 

Produces: (1, 'One') - (2, 'Two') - 

अलग विकल्प tuples में तत्वों से अधिक पुनरावृति करने के लिए:

{% for choice_id, choice_label in form.travels.field.choices %} 
    {{ choice_id }} = {{ choice_label }} <br/> 
{% endfor %} 

Produces: 1 = One 
      2 = Two 

आशा है कि मदद करता है। ऐसा कहकर, हालांकि, मुझे उस संदर्भ के बारे में निश्चित नहीं है जिसमें आपको ऐसा करने की आवश्यकता है; सतह पर, यह बहुत django की तरह प्रतीत नहीं होता है। आप पाते हैं कि कस्टम फॉर्म फ़ील्ड या कस्टम टेम्पलेट टैग का उपयोग करके आपको एक अधिक पोर्टेबल, पुनः उपयोग करने योग्य कार्यान्वयन मिलता है जो बेहतर कोड और टेम्पलेट कोड के बीच django के इच्छित पृथक्करण को बनाए रखता है। बेशक, वाईएमएमवी और यह अच्छी तरह से हो सकता है कि इस मामले में प्रत्यक्ष पुनरावृत्ति दृष्टिकोण आपके लिए उपयुक्त है।

+3

मुझे पता है कि यह पुराना है, लेकिन क्या यह निर्धारित करने का कोई तरीका है कि फ़ील्ड का चयन किया गया है या नहीं? –

+0

सबसे पहले, कस्टम विजेट का उपयोग करते समय सावधान रहें, फ़ील्ड विकल्प और विजेट विकल्प समान नहीं हो सकते हैं। तो आपको "form.travels.field.widget.choices" का उपयोग करने की आवश्यकता होगी। –

+0

दूसरा, कस्टम चयन के लिए यदि आप रेडियो विजेट का उपयोग कर रहे हैं, तो आपको फ़ील्ड मान के विरुद्ध प्रत्येक मान की जांच करनी होगी और जब वे मिलान करते हैं तो इनपुट को चेक करने के लिए सेट करना होगा। उदाहरण के लिए: "{% अगर form.travels.value = choice_id%} चेक =" चेक किया गया "{% endif%}"। –

0

यदि आपके पास कोई फॉर्म है। मॉडल फ़ील्ड एक विकल्प फ़ील्ड के साथ, आप टेम्पलेट में इसे एक साधारण टेम्पलेट फ़िल्टर द्वारा पुन: संपादित कर सकते हैं।

forms.py

STATE_CHOICES = (
    (10, 'NO'), 
    (4, 'YES'), 
    (18, 'Send to another Chemist for Review'), 
    (34, 'Send to another Market Expert for Review'), 
    (20, 'HOLD'), 
) 
new_state = forms.ChoiceField(
    choices=STATE_CHOICES, 
    required=True, 
) 

टेम्पलेट:

{{ business_manager_form.new_state|filter_project_states:project }} 

और यहाँ फिल्टर यह आत्म है।

@register.filter() 
def filter_project_states(argv, project): 
if project.department.id != 4: 
argv.field.choices = [choice for choice in argv.field.choices if choice[0] != 34] 
return argv 

मुझे उम्मीद है कि इससे मदद मिलती है।