在Django中构建选择选项

在Django中构建选择选项,django,forms,drop-down-menu,Django,Forms,Drop Down Menu,我想创建一个表单,在查看时,从数据库中查询用户喜爱的水果,并显示如下: <select size="4"> <option selected>Apples</option> <option>Bananas</option> <option>Oranges</option> <option>Watermelon</option> </select> 使用表单的视图将: 获

我想创建一个表单,在查看时,从数据库中查询用户喜爱的水果,并显示如下:

<select size="4"> 
<option selected>Apples</option>
<option>Bananas</option> 
<option>Oranges</option>
<option>Watermelon</option> 
</select>
使用表单的视图将:

获取用户对象。 在数据库中查询用户喜爱的水果。每个都是水果模型的单独对象。 在表单中加载2中收集的水果选择。 我曾考虑使用ChoiceField,但看起来您无法动态地将选项列表加载到表单中,至少不能以直接的方式加载。跳过表单并直接在模板上生成代码是否更好?或者是否有方法在视图中加载包含用户项的表单ChoiceField


此外,是否有任何一般的经验法则规定使用django表单字段构建表单比在模板上生成表单代码更容易?

这并不难。您可以使用modelform轻松地完成这一点

见:


Django框架的优点之一是它的表单处理和验证方法。因此,如果可能,最好使用Django表单或模型表单。

这并不难。您可以使用modelform轻松地完成这一点

见:

Django框架的优点之一是它的表单处理和验证方法。因此,如果可能,最好使用Django表单或模型表单。

创建将在视图中使用的或。这两个类之间的区别在于,ModelForm的构建非常类似于models.py文件中定义的数据库模型,其中表单可以具有自定义属性

from django.forms import ModelForm
class FruitForm(ModelForm):
    class Meta:
        model = User
        fields = ('favorite-fruits', )
创建将在视图中使用的或。这两个类之间的区别在于,ModelForm的构建非常类似于models.py文件中定义的数据库模型,其中表单可以具有自定义属性

from django.forms import ModelForm
class FruitForm(ModelForm):
    class Meta:
        model = User
        fields = ('favorite-fruits', )
我发现这个技巧的答案是重写形式_uinit _uu,这样它就接受了一个新的关键字参数,在本例中就是用户

views.py代码段

forms.py代码段

我发现这个技巧的答案是重写形式_uinit _uu,这样它就接受了一个新的关键字参数,在本例中就是用户

views.py代码段

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)