2017-08-04 135 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,第二個參數是queryset

請在您的視圖中沿着filter = MyFilter(data=request.GET, queryset=queryset)的方向嘗試。

請參閱:http://django-filter.readthedocs.io/en/develop/guide/usage.html#the-view

+0

確定我錯過了我的示例中的請求信息。儘管如此,仍然可以在下拉列表中的「Fruit」模型中輸入所有條目,而不僅僅是查詢集中的條目... – DrBuck