我想创建一个表单,在查看时,会从数据库中查询用户最喜欢的水果并显示如下:
<select size="4">
<option selected>Apples</option>
<option>Bananas</option>
<option>Oranges</option>
<option>Watermelon</option>
</select>
使用表单的视图将:
我正在考虑使用ChoiceField,但看起来你无法动态地将选择列表加载到表单中,至少是以一种简单的方式。我最好跳过表单并直接在模板上生成代码吗?或者有没有办法在视图中加载表单的ChoiceField和用户项?
此外,是否有任何一般的经验法则规定使用django表单字段构建表单比在模板上生成表单代码更容易?
答案 0 :(得分:4)
我在this stack overflow topic.中找到了答案。诀窍是覆盖表单__init__()
,以便它接受一个新的关键字参数,在这种情况下是用户。
views.py代码段
context = RequestContext(request)
user = User.objects.get(username=context['user'])
form = forms.FruitForm(user=user)
forms.py代码段
from django import forms
class FruitForm(forms.Form):
fruits = forms.ModelChoiceField(queryset=Fruit.objects.all())
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(FruitForm, self).__init__(*args, **kwargs)
if user:
self.fields['fruits'].queryset = Fruit.objects.filter(user=user)
答案 1 :(得分:0)
这并不困难。您可以使用模型轻松完成此任务。
请参阅:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/
Django框架的优势之一是它的表单处理和验证方法。因此,如果可能的话,最好使用Django表单或模型表单。
答案 2 :(得分:0)