2015-03-20 2 views
0

У меня возникла проблема с отображением отдельных полей формы в шаблоне. У меня есть модельный набор, который я переупорядочиваю после создания, чтобы немного упростить отображение шаблона. Ничего сложного, но создание полей формы не работает. Вы можете увидеть в шаблоне, где я пытаюсь выполнить рендеринг {{ 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 %} 
+0

В вашем коде есть очень странные вещи, не в последнюю очередь из которых является повторное использование 'hasattr' для проверки наличия ключа в словаре. Это не делает этого вообще: вы имеете в виду «ключ в dict», например 'if not form.instance.job.number в ordered_forms'. –

+0

@ DanielRoseman Хорошая точка. Не знаю, что я там думал. Обновлен этот бит кода, чтобы сосать меньше. –

ответ

0

Оказывается, я забыл добавить .items - {% for user, forms in users %}.

{% for job, users in ordered_forms.items %} 
     <h2>{{ job }}</h2> 
     {% for user, forms in users.items %} 
      <table class='table striped'> 
       .... 
     {% endfor %} 
    {% endfor %}