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']
這似乎有點大材小用。只顯示基於輸入查詢集的選項似乎是理想的行爲,但我找不到任何文檔。有沒有一個好的方法來做到這一點?任何幫助感謝!
確定我錯過了我的示例中的請求信息。儘管如此,仍然可以在下拉列表中的「Fruit」模型中輸入所有條目,而不僅僅是查詢集中的條目... – DrBuck