我正在为我的网站构建一个过滤器,人们可以通过美食过滤。为了实现这一点,我使用模型表单来接收输入信息,该信息在我的视图中的查询中设置过滤器变量。但是,正如您在下面链接的图像中看到的,我的菜肴类别的默认选择是'-------'。
我如何更改此内容以说出“全部”字样并设置值,以便我的过滤器查询这些类别的所有内容?我认为这与使用表单方法有关,但我无法理解某些示例中实际发生的情况。
这是我的简单代码
模型
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')
答案 0 :(得分:1)
我不会在这里使用模型。您只有一个字段,并且您没有使用它来创建或编辑Food或Cuisine的实例。使用带有ModelChoiceField的手动表单会更简单,您可以将empty_label
参数传递给它。
class FilterForm(forms.Form):
cuisine = forms.ModelChoiceField(queryset=Cuisine.objects.all(),
empty_label="All")
(请注意,您也可以使用ModelForm执行此操作,但这使得它更加毫无意义,因为您现在没有使用任何ModelForm功能。)