2016-08-15 59 views
1

我正在开发一个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 }) 

任何想法,该怎么办呢?

回答

0

这是一个已知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'---------')) 
相关问题