我需要一个CRUD表,并且不想写出字段名(太多)。我想使用序列化程序在第一行中创建表单,并在下面的行中创建已输入的数据。即使选择和FK,显示数据也可以正常工作。问题是我无法遍历表单域。
在“ template1.html”中,我检查了“ render_form”和序列化器。好的,到目前为止。问题:在“ template2.hmtl”中,我尝试循环并将每个表单(渲染的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”对象没有属性“ data””。它表明“ serializer”不可迭代。我也在模板中尝试了{%for 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)