Python 根据模型向外键表单字段添加“all”值?

Python 根据模型向外键表单字段添加“all”值?,python,django,forms,filter,Python,Django,Forms,Filter,我正在为我的网站建立一个过滤器,在那里人们可以根据菜肴进行过滤。为了实现这一点,我使用了一个模型表单来接收输入信息,在我的视图中的查询中设置过滤器变量。但是,正如您在下面链接的图像中所看到的,我的烹饪类别的默认选择是“----” 我该如何将其更改为“全部”,并设置一个值,以便我的过滤器查询这些类别的所有内容?我认为这与使用表单方法有关,但我无法理解某些示例中实际发生的情况 这是我的简单代码 模型 class Cuisine(models.Model): name = models.Cha

我正在为我的网站建立一个过滤器,在那里人们可以根据菜肴进行过滤。为了实现这一点,我使用了一个模型表单来接收输入信息,在我的视图中的查询中设置过滤器变量。但是,正如您在下面链接的图像中所看到的,我的烹饪类别的默认选择是“----”

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

这是我的简单代码

模型

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
观点

形式


我不会在这里使用模型。您只有一个字段,而不是使用它来创建或编辑食物或烹饪的实例。使用带有ModelChoiceField的手动表单会更简单,您可以将参数传递给该字段

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

注意,您也可以使用ModelForm来实现这一点,但这只会使它变得更加毫无意义,因为您现在没有使用任何ModelForm功能

这似乎不是您的实际代码。美食没有选择字段,因此表单不会用下拉菜单呈现。很抱歉,你是对的,这个屏幕截图来自我的旧代码,我的旧东西有点脏。我需要再加进去。编辑:刚刚检查了我的旧代码,这实际上就是我所拥有的,除了在表单中,模型被设置为食物。它会呈现选择下拉列表。对,食物模型会呈现下拉列表,因为它有一个外键。请你更新代码。非常感谢,我完全明白你的意思。只有在添加或编辑实例时才应使用modelform。我没有意识到在我所有的菜肴中添加一个多选区域是如此容易。
class FilterForm(forms.ModelForm):
    class Meta:
        model = Cuisine
        fields = ('name')
class FilterForm(forms.Form):
    cuisine = forms.ModelChoiceField(queryset=Cuisine.objects.all(),
                                     empty_label="All")