下面是一個相關的SO問題:Django and Fieldsets on Modelform,雖然這看起來有點矯枉過正,我期待完成。此外,這裏有一個可能的黑客攻擊,儘管我很好奇聽到Django專家如何解決這個問題。
(0)定義蟒字段集對象,它是可迭代,所以我們可以在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
標籤的Wi th div
標籤來解決我的具體問題。
+++這個答案很多都是從this blog post by Michael Kowalchik中提取的。 +++
我喜歡使用重新分組標記---我不知道它存在。謝謝! – 2012-04-28 21:45:30
注意:你的第一個解決方案不太適合循環模板中的字段---使用yield關鍵字來創建一個生成器以獲得預期的字段(參見下面的文章)並模擬django的典型字段迭代 – 2012-04-28 22:49:54
@ C.Reed,你是對的我忘了返回BoundFields。更新。感謝您的注意! – 2012-04-28 23:30:14