Как зациклить шаблон над сериализатором, используемым как форма - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужна таблица CRUD и я не хочу записывать имена полей (слишком много). Я хочу использовать сериализатор, чтобы сделать формы в первой строке и уже введенные данные в строках ниже. Отображение данных работает отлично, даже с выбором и FK. Проблема в том, что я не могу зациклить поля формы.

В "template1.html" я проверил "render_form" и сериализатор. Хорошо пока чтоПРОБЛЕМА: В "template2.hmtl" я пытаюсь loop и расположить каждую форму (визуализированный REST-сериализатор) в столбце и получить ошибки. Как правильно зациклить?

template1.html
...rest of table is omitted...

     <tr>
        <form method="POST">
              {% csrf_token %}

              <th>
                   {% render_form serializer template_pack='rest_framework/inline'%}
                        <input type="submit" value="Save">
              </th>

        </form>
     </tr>
template2.html
...rest of table is omitted...

     <tr>
        <form method="POST">
           {% csrf_token %}
           {% for s in serializer %}         
              <th>
                   {% render_form s template_pack='rest_framework/inline'%}

              </th>
           {% endfor %}
              <th>
                  <input type="submit" value="Save">
              </th>
        </form>
     </tr>

Ошибка: Я получаю: "... Ошибка при воспроизведении шаблона ...", "Значение исключения:
У объекта 'CharField' нетатрибут «данные». Это говорит о том, что «сериализатор» не повторяется. Я также попытался {% для s в serializer.data%} в шаблоне.

Дополнительная информация:

serializer.py

class MyChoiceField(serializers.ChoiceField):
    ''' for display of field labels not keys'''

    def to_representation(self, data):
        if data not in self.choices.keys():
            self.fail('invalid_choice', input=data)
        else:
            return self.choices[data]

class KernSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.CharField(source='get_absolute_url', read_only=True)
    # strassenorientierung = serializers.SerializerMethodField(style={'base_template': 'select.html'})
    strassenorientierung = MyChoiceField(choices=Kern.CHOICES_strassenorientierung)
    oberflachenzustand   = MyChoiceField(choices=Kern.CHOICES_oberflachenzustand)
    beregnung            = MyChoiceField(choices=Kern.CHOICES_beregnung)
    date_posted = serializers.DateTimeField(format=None, default_timezone=TIME_ZONE) #format=DATETIME_FORMAT)
    class Meta:
        # 'url',
        model = Kern
        fields = ['url', 'id','abstand_horiz', 'abstand_vert', 'abstand_fahrtricht', 'strassenorientierung', 'oberflachenzustand','beregnung','entnahme_datum', 'betondeckung', 'bohrkernbezeichnung', 'karbonatisierung', 'wennersonde', 'comment','date_posted']
        depth = 1


view.py:

...stuff deleted ...
    serializer = KernSerializer()
     content = {'serializer': serializer, 'objekt_form': objekt_form, 'objektebelow': objektebelow_DRF.data, 'form': form, 'fields_list_displayed': fields_list_displayed, 'form_fields':form_fields,'model':model, 'next_url':next_url, 'projekt': projekt, 'objekt_data': objekt_data, 'projekt_id':projekt_id, 'objekt_id': objekt_id, 'bauteil': bauteil}
     return render(request, template_name, content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...