假设我有一个拥有几个不同字段的模型。
models.py
class Items(models.Model):
languages = models.Charfield(...)
title = models.Charfield(...)
audio = models.Charfield(...)
使用分隔符(“||”)将数据保存在每个数据中。我想创建一个分割数据的表单,然后使用保存的数据预填充值。
理论上:
{'languages': 'English||French||German'}
{'title': '1.1||Red Balloon||Banana'}
{'audio': 'yes||no||yes'}
将分为:
{'languages': ['English', 'French', 'German']}
{'title': ['1.1', 'Red Balloon', 'Banana']}
{'audio': ['yes', 'no', 'yes']}
然后每个值都会自动填充值字段。最终显示为:
<tr>
<td><input type="text" name="languages[]" value="English"></td>
<td><input type="text" name="title[]" value="1.1"></td>
<td><input type="text" name="audio[]" value="yes"></td>
</tr>
<tr>
<td><input type="text" name="languages[]" value="French"></td>
<td><input type="text" name="title[]" value="Red Balloon"></td>
<td><input type="text" name="audio[]" value="no"></td>
</tr>
...
例如,由于每行都有不同数量的“语言”,因此创建此类表单的首选方法是什么。我正在使用Django 1.11。发布了第一个问题,如果我在这篇文章中遗漏了一些内容,你能不能告诉我?我也搜索过与此相关的信息,但我还没有找到解决方案。谢谢!
- 编辑反映charFields持有用户输入。在此示例中,输入“语言”和“标题”不够一致,无法将它们用作多选字段。
答案 0 :(得分:1)
在您的情况下,您需要先定义某种ItemForm
:
from django import forms
class ItemForm(forms.Form):
language = forms.CharField()
setting = forms.CharField()
audio = forms.CharField()
在views.py中,您可以使用初始表单数据定义表单集:
from django.forms import formset_factory
from myapp.forms import ItemForm
item = Items.objects.all()[0] # replace this with your actual query
languages = item.languages.split('||')
settings = item.settings.split('||')
audios = item.audio.split('||')
ItemFormSet = formset_factory(ItemForm, extra=len(languages))
formset = ItemFormSet(initial=[
{'language': language,
'setting': setting,
'audio':audio,
} for language, setting, audio in zip(languages, settings, audios)])
答案 1 :(得分:0)
也许您应该只考虑ChoiceFields
。