यहां एक प्रासंगिक SO प्रश्न है: Django and Fieldsets on Modelform, हालांकि यह जो कुछ मैं पूरा करना चाहता हूं उसके लिए थोड़ा अधिक लगता है। इसके अलावा, यहां एक संभावित हैक है, हालांकि मुझे यह जानकर उत्सुकता है कि Django विशेषज्ञ इस समस्या को कैसे हल करते हैं।
(0) एक अजगर fieldset उद्देश्य यह है कि iterable है तो हम एक Django टेम्पलेट में इस पर पुनरावृति कर सकते हैं परिभाषित करें:
from django.forms.forms import BoundField
class FieldSet(object):
def __init__(self,form,fields,legend='',cls=None):
self.form = form
self.legend = legend
self.fields = fields
self.cls = cls
def __iter__(self):
for name in self.fields:
field = self.form.fields[name]
yield BoundField(self.form, field, name)
(1) दृश्य उपयोग में:
fieldsets = (FieldSet(form_object, ('field_name1','field_name2'),
legend='Div env 1',
cls="class1"),
FieldSet(form_object, ('field_name3','field_name4'),
legend="Div env 2",
cls="class2"))
return render_to_response('my_form.html',
{'form': form_object,'fieldsets':fieldsets},
context_instance=RequestContext(request))
(2) टेम्पलेट में अब कार्य करें:
{% for set in fieldsets %}
<fieldset{% if set.cls %} class="{{ set.cls }}"{% endif %}>
<legend>{{ set.legend }}</legend>
{% for field in set %}
{{ field.label}} : {{ field }}
{% endfor %}
</fieldset>
{% endfor %}
ध्यान दें कि यह संभव है fieldset
टैग वाई बदलने के लिए मेरे विशिष्ट प्रश्न को संबोधित करने के लिए div
टैग।
+++ इस उत्तर का अधिकांश उत्तर this blog post by Michael Kowalchik से निकाला गया। +++
मुझे पुन: समूह टैग का उपयोग पसंद है --- मुझे यह पता नहीं था कि यह अस्तित्व में है। धन्यवाद! –
नोट: आपका पहला समाधान टेम्पलेट में फ़ील्ड पर लूप करने के लिए काफी काम नहीं करता --- अपेक्षित फ़ील्ड प्राप्त करने के लिए जनरेटर बनाने के लिए 'उपज' कीवर्ड का उपयोग करें (नीचे मेरी पोस्ट देखें) और डीजेंगो के विशिष्ट क्षेत्र पुनरावृत्ति को अनुकरण करें –
@ सीआरआईडी, आप सही हैं मैं बाउंडफिल्ड्स लौटने के लिए भूल गया। अपडेट किया गया। ध्यान देने के लिए धन्यवाद! –