【问题标题】:Building Select Options in Django在 Django 中构建选择选项
【发布时间】:2012-06-19 03:20:08
【问题描述】:

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

<select size="4"> 
<option selected>Apples</option>
<option>Bananas</option> 
<option>Oranges</option>
<option>Watermelon</option> 
</select>

使用表单的视图将:

  1. 获取用户对象。
  2. 在数据库中查询用户最喜欢的水果。 (每个都是 Fruit 模型的一个单独对象。)
  3. 使用 (2) 中收集的水果选项加载表单。

我正在考虑使用 ChoiceField,但您似乎无法将选项列表动态加载到表单中,至少以简单的方式。我最好跳过表单并直接在模板上生成代码吗?或者有没有办法在视图中加载表单的 ChoiceField 和用户项?

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

【问题讨论】:

    标签: django forms drop-down-menu


    【解决方案1】:

    我在this stack overflow topic. 中找到了答案,诀窍是覆盖__init__() 的形式,以便它接受一个新的关键字参数,在这种情况下是用户。

    views.py sn-p

    context = RequestContext(request)
    user = User.objects.get(username=context['user'])
    form = forms.FruitForm(user=user)
    

    forms.py sn-p

    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)
    

    【讨论】:

      【解决方案2】:

      这并不难。您可以使用模型表单轻松完成此操作。

      见:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

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

      【讨论】:

        【解决方案3】:

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

        from django.forms import ModelForm
        class FruitForm(ModelForm):
            class Meta:
                model = User
                fields = ('favorite-fruits', )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-28
          • 2012-01-13
          • 2018-11-22
          • 2013-02-14
          • 1970-01-01
          • 2010-11-19
          • 2017-11-20
          相关资源
          最近更新 更多