Мне нужна таблица 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)