2017-08-04 15 views
1

私はdjango-filterを使用して、自分のサイトのリストビューでユーザーフィルタリングを提供します。私はこれを行う場合Djangoはクエリーセット専用のフィルタオプション

class MyModel(models.Model): 
    fruit = models.ForeignKey(Fruit) 
    price = models.CharField(...) 
    release_date = models.DateTimeField(...) 

class MyFilter(filters.FilterSet): 
    ... 

    class Meta: 
     model = MyModel 
     fields = ['fruit', 'price', 'release_date'] 

def my_banana_orange_view(request): 
    ... 
    queryset = MyModel.objects.filter(fruit__name__in=['banana', 'orange']) 
    filter = Filter(request.GET, queryset=queryset) 

    return render(request, 'my_template.html', {'queryset': queryset, 'filter': filter}) 

は今、私はバナナやオレンジのいずれかの関係を持っているだけでMyModelエントリを表示することができますが、MyFilterはまだFruitモデル内のすべての果物のオプションを提供します。私は、入力クエリセットに関連するオプションを表示するだけのFilterSetの設定を見つけようとしていますが、見つけられません。誰かが存在しますか?

そうでなければ私はこのような何かをするためのフィルタを無効にする必要があります推測:

class MyFilter(filters.FilterSet): 

    def __init__(self, *args, **kwargs): 
     super().__init__(self, *args, **kwargs) 

     self.filters['fruit'].extra['queryset'] = Fruit.objects.filter(mymodel=self.queryset) 

    class Meta: 
     model = MyModel 
     fields = ['fruit', 'price', 'release_date'] 

ビット行き過ぎ思われます。入力クエリセットに基づいたオプションだけを表示することは望ましい動作と思われますが、そのドキュメントを見つけることはできません。これを行う良い方法はありますか?どんな助けにも感謝!

答えて

0

FilterSetの最初のパラメータはdataであり、2番目のパラメータはquerysetです。

filter = MyFilter(data=request.GET, queryset=queryset)の行に沿って何かを試してみてください。

参照:http://django-filter.readthedocs.io/en/develop/guide/usage.html#the-view

+0

OK私の例ではリクエスト情報が欠落していました。これをやっても、クエリーセットにあるものだけでなく、ドロップダウンの 'Fruit'モデルのすべてのエントリが表示されます... – DrBuck

関連する問題