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")