6
私はDRF(Django Rest Framework)を使用しています。Django Rest FrameworkのSearchFilterと一緒に通常のフィルタを使用するには?
私はModelViewSetを宣言しましたが、今ではフィルターを追加したいと思います。私は、行を追加する前にそれは、冒頭で働いていた
filter_class = Filter
::私はフィルターのサブクラスを宣言し、それを適用することを見て
class GoodsViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
class Meta:
model = m.Goods
filter_class = Filter
filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
queryset = m.Goods.objects.all()
serializer_class = s.GoodsSerializer
で言われた
filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
これで、通常のfilter_class
をスキップして検索フィルタが適用されます。
一言で言えば、一緒に働くことはできません。
この問題を回避するには?
from rest_framework.filters import SearchFilter
from django_filters.rest_framework import DjangoFilterBackend
class GoodsViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
class Meta:
model = m.Goods
filter_class = Filter
filter_backends = (SearchFilter, DjangoFilterBackend)
search_fields = ['name',]
queryset = m.Goods.objects.all()
serializer_class = s.GoodsSerializer
それとも、我々は特定のViewSet
クラスにfilter_backends
フィールドを無視することができますが、settings.py
でグローバルに適用します:
REST_FRAMEWORK = {
# ... other configurations
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.SearchFilter',
'django_filters.rest_framework.DjangoFilterBackend',
),
}
をそう
filter_classの名前を他のクラス名に変更しますか?例。 filter_class = My_Custom_Filter – Kishan
@soupboyありがとう、その問題ではありません。私は解決策を見つけ出し、答えとして投稿しました。私はちょうど答えをここに掲示したいと思う。 –
@AlfredHuangこの問題に関するブログがありますか?私は完全な実装を見たいと思います。私が理解することはまだ難しいです。あなたのソリューションは面白いです。 – Sarit