У меня возникла проблема с отображением отдельных полей формы в шаблоне. У меня есть модельный набор, который я переупорядочиваю после создания, чтобы немного упростить отображение шаблона. Ничего сложного, но создание полей формы не работает. Вы можете увидеть в шаблоне, где я пытаюсь выполнить рендеринг {{ form.train }}
, но ничего не отображается на выходе. Однако форма определенно существует, потому что {{ form.instance.user.name }}
работает правильно.Проблема с полем формы Django с моделью formet
Я открыл PDB и осмотрел переменную формы, которую добавляю в словарь, и он говорит <django.forms.widgets.ScheduleForm object at 0x10c58bc50>
. Я не уверен, что это помогает или нет, но я хотел предоставить как можно больше информации.
Форма Модель
class ScheduleForm(ModelForm):
class Meta:
model = models.Schedule
fields = [
'train',
'semi',
'tri_axle',
'flow_boy',
'misc',
'material',
'notes'
]
views.py
formset_fields = ('train','semi','tri_axle','flow_boy','misc','material','notes')
ScheduleFormSet = modelformset_factory(models.Schedule, fields=formset_fields, extra=0)
formset = ScheduleFormSet(queryset=queryset)
# Getting form in the right format
ordered_forms = {}
for form in formset:
# Make sure the job exists on the object
if not form.instance.job.number in ordered_forms:
ordered_forms[form.instance.job.number] = {}
# Make sure the user exists on the object
if not form.instance.user.name in ordered_forms[form.instance.job.number]:
ordered_forms[form.instance.job.number][form.instance.user.name] = []
# Append to correct place.
ordered_forms[form.instance.job.number][form.instance.user.name].append(form)
# Dict will look like
# { 'jobID' : { 'user' : [form1,form2,form3] } }
Шаблон
{% for job, users in ordered_forms.items %}
<h2>{{ job }}</h2>
{% for user, forms in users %}
<table class='table striped'>
<thead>
<tr>
<th>{{ user }}</th>
<th>Train</th>
<th>Semi</th>
<th>Tri-Axle</th>
<th>Flow Boy</th>
<th>Misc</th>
<th>Material</th>
<th>Notes</th>
<th></th>
</tr>
</thead>
<tbody>
{% for form in forms %}
<tr>
<td>{{ form.instance.broker.name }}</td>
<td>{{ form.train }}</td>
<td>Semi</td>
<td>Tri-Axle</td>
<td>Flow Boy</td>
<td>Misc</td>
<td>Material</td>
<td>Notes</td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
{% endfor %}
В вашем коде есть очень странные вещи, не в последнюю очередь из которых является повторное использование 'hasattr' для проверки наличия ключа в словаре. Это не делает этого вообще: вы имеете в виду «ключ в dict», например 'if not form.instance.job.number в ordered_forms'. –
@ DanielRoseman Хорошая точка. Не знаю, что я там думал. Обновлен этот бит кода, чтобы сосать меньше. –