添加'全部'基于模型的外键表单字段的值?

时间:2014-06-16 09:32:53

标签: python django forms filter

我正在为我的网站构建一个过滤器,人们可以通过美食过滤。为了实现这一点,我使用模型表单来接收输入信息,该信息在我的视图中的查询中设置过滤器变量。但是,正如您在下面链接的图像中看到的,我的菜肴类别的默认选择是'-------'。

我如何更改此内容以说出“全部”字样并设置值,以便我的过滤器查询这些类别的所有内容?我认为这与使用表单方法有关,但我无法理解某些示例中实际发生的情况。

这是我的简单代码

模型

class Cuisine(models.Model):
    name = models.CharField()

    def __str__(self):
        return self.name

class Food(models.Model):
    name = models.CharField()
    cuisine = models.ForeignKey(Cuisine)

    def __str__(self):
        return self.name

浏览

def home_page(request):
    if request.method == 'GET':
        form = FilterForm(request.GET)
        if form.is_valid():
            cuisine = form.cleaned_data['cuisine']
            food = get_list_or_404(Food, cuisine__pk=cuisine.pk)
            return render('base.html', {'food': food, 'form':form})
    else:
        form = FilterForm()
    return render('base.html', {'form':form})

表格

class FilterForm(forms.ModelForm):
    class Meta:
        model = Cuisine
        fields = ('name')

1 个答案:

答案 0 :(得分:1)

我不会在这里使用模型。您只有一个字段,并且您没有使用它来创建或编辑Food或Cuisine的实例。使用带有ModelChoiceField的手动表单会更简单,您可以将empty_label参数传递给它。

class FilterForm(forms.Form):
    cuisine = forms.ModelChoiceField(queryset=Cuisine.objects.all(),
                                     empty_label="All")

(请注意,您也可以使用ModelForm执行此操作,但这使得它更加毫无意义,因为您现在没有使用任何ModelForm功能。)