簡體   English   中英

Django僅過濾特定於queryset的選項

[英]Django filters options specific to queryset only

我使用django-filter在我網站的列表視圖上為用戶提供過濾,例如

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']

這似乎有點矯kill過正。 僅顯示基於輸入查詢集的選項似乎是理想的行為,但是我找不到任何文檔。 有什么好方法嗎? 任何幫助表示贊賞!

FilterSet的第一個參數是data ,第二個參數是queryset

在視圖中嘗試使用filter = MyFilter(data=request.GET, queryset=queryset)的方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM