Я генерирую ModelForms и хочу получить подробный контроль над тем, как они выводятся в моем шаблоне. В частности, мне нужно добавить некоторую разметку в конец каждого переключателя в каждом из моих списков выбора.Пытаться получить доступ к модели модели ModelForm Выбор выбора в шаблоне Django
Код:
# order-form.html
{% load catname %}
<form id = "order-form">
{% for form in forms %}
<div id="gun-{{ forloop.counter }}">
{% for field in form.fields %}
<div id="{{ field }}-item" class="item">
<h3>{{ field|catname }}</h3>
{% for choice in form.field.choices %} {# <-- Help me out here #}
{{ choice.id }}
{{ choice.title }}
{% endfor %}
</div>
{% endfor %}
{% endfor %}
<button type="submit" id="standard-gun-form-submit">Continue to next step</button>
</form>
# views.py
def get_form(request):
if request.method == 'POST':
if request.POST['gun_type'] == 'standard':
forms = [StandardGunForm(prefix=p) for p in range(0,2)]
return render_to_response('main/order-form.html', {'forms' : forms,}, RequestContext(request))
# forms.py
class StandardGunForm(ModelForm):
def __init__(self, *args, **kwargs):
super(StandardGunForm, self).__init__(*args, **kwargs)
for field in self.fields:
if isinstance(self.fields[field], ModelChoiceField):
self.fields[field].empty_label = None
class Meta:
model = BaseGun
widgets = {
'FrameTuning' : RadioSelect(),
'FrameConnection' : RadioSelect(),
}
exclude = ('price')
Endgame: разметка, которая выглядит как этот
<form id="foo">
<div class="category">
<div class="item">
<input type="radio" name="srsbzns" value="1">Option 1</input>
<img src="http://placekitten.com/150/150">
<p>Other foo here</p>
</div>
<div class="item">
<input type="radio" name="srsbzns" value="2">Option 2</input>
<img src="http://placekitten.com/150/150">
<p>Other foo here</p>
</div>
<div class="item">
<input type="radio" name="srsbzns" value="3">Option 3</input>
<img src="http://placekitten.com/150/150">
<p>Other foo here</p>
</div>
</div>
</form>
из оболочки, это возвращает то, что я хочу
>>> forms = [StandardGunForm(prefix=p) for p in range(0,2)]\
>>> forms[0].fields['frame_tuning'].choices.queryset
Я удивлен, что это доказывает так сложно!
Бонус: У меня есть панель DEBUG = True и Django Debug. Можно ли сбросить переменные в браузер, чтобы я мог видеть, как выглядит этот материал, когда я разворачиваюсь?
Спасибо!
Я думаю, '{% для id, title in field.choices%}', но почему бы не просто '{{field}}' с помощью специального виджета?Если вам нужен пользовательский вывод, напишите собственный виджет ... :-) –
Да, пользовательский виджет может быть способом – starsinmypockets