django - 如何在用作表单的序列化程序上循环模板
问题描述
我需要一个 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'”。它接缝“序列化器”是不可迭代的。我还在模板中尝试了 {% for s in 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)
解决方案
推荐阅读
- node.js - 如何比较 WebdriverIO 报告并生成差异?
- reactjs - Redux 表单状态输入
- html - 如果服务器页面已更改,则自动刷新客户端浏览器
- r - 如何使用 r 从这个特定网站上抓取数据?
- github - 如何从 github git pull 并推送到 heroku?
- swift - 在 SwiftUI 中,如何增加按钮的高度?
- javascript - 数据不会出现:无法读取未定义的属性“切片”
- java - 编译程序后如何从源文件夹中获取 jar?
- python - 自定义字符串拆分算法
- android - 无法实例化活动 ComponentInfo{com.example.dip.tuneai/com.example.dip.tuneai.MainActivity}:java.lang.ClassNotFoundException