2016-08-15 8 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'---------')) 
関連する問題