【问题标题】:How to make an option 'All' in django filters when filtering data过滤数据时如何在 django 过滤器中选择“全部”
【发布时间】:2016-08-15 08:48:37
【问题描述】:

我正在开发一个 django 应用程序,我可以在其中根据食谱过滤成分。我正在使用 django 过滤器为我的用户提供过滤选项。我的过滤下拉菜单工作得非常好,但我想添加一个选项“全部”,在提交时,无论其配方如何,所有成分都应列出。

这是我的代码:

#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 })

知道怎么做吗?

【问题讨论】:

    标签: python django django-filter


    【解决方案1】:

    这是一个已知的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'---------'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-09
      • 2022-11-12
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2019-06-18
      • 2015-07-11
      • 2019-01-31
      相关资源
      最近更新 更多