如何在过滤数据时在django过滤器中设置选项'All'
问题描述:
我正在开发一个django应用程序,可以根据食谱过滤配料。我使用Django过滤器来给我的用户过滤选项。我的过滤下拉菜单工作得很好,但我想添加一个选项'全部',提交时应列出所有配料,而不管其配方如何。如何在过滤数据时在django过滤器中设置选项'All'
这里是我的代码:
#models.py
class Recipe(models.Model):
user = models.ForeignKey('auth.User')
title = models.CharField(max_length=500)
description = models.TextField(max_length=500)
rules = models.TextField(max_length=500,blank=True)
def __str__(self):
return self.title
class Ingredient(models.Model):
user = models.ForeignKey('auth.User')
recipe_id = models.ForeignKey(Recipe, on_delete=models.CASCADE)
title = models.CharField(max_length=500)
instructions = models.CharField(max_length=500)
rules = models.TextField(max_length=500,blank=True)
primal = models.CharField(default='0',max_length=500,blank=True)
def __str__(self):
return self.title
#forms.py
class RecipeFilter(django_filters.FilterSet):
class Meta:
model = Ingredient
fields = ['recipe_id']
#views.py
def ingredient_list(request):
ingredientfilter = IngredientFilter(queryset=Recipe.objects.filter(user = request.user))
if request.method == 'GET' and 'recipe_id' in request.GET:
recipe_id=request.GET['recipe_id'];
ingredients = Ingredient.objects.filter(recipe_id= recipe_id)
selected_combo_value = Recipe.objects.get(pk=recipe_id)
return render(request, 'ingredient_list.html',{'ingredients':ingredients, 'ingredientfilter': ingredientfilter,'selected_combo_value':selected_combo_value })
else:
ingredients = Ingredient.objects.filter(user = request.user)
return render(request, 'ingredient_list.html',{'ingredients':ingredients, 'ingredientfilter': ingredientfilter })
任何想法,该怎么办呢?
答
这是一个已知issue。解决方法是重写筛选器的选项。
class RecipeFilter(django_filters.FilterSet):
def __init__(self, *args, **kwargs):
super(RecipeFilter, self).__init__(*args, **kwargs)
self.filters['recipe_id'].field.choices.insert(0, ('', u'---------'))