class OrderFilter(django_filters.FilterSet):
class Meta:
model = Order
fields = {
'status': ['exact',],
'client': ['icontains',],
}
class OrderViewset(viewsets.ModelViewSet):
filter_class = OrderFilter
permission_classes = ( permissions.IsAuthenticated, )
serializer_class = OrderSerializer
queryset = Order.objects.all()
filter_backends = (
filters.OrderingFilter,
filters.SearchFilter,
filters.DjangoFilterBackend
)
ordering_fields = ('added_at', 'status', 'client', 'order_number')
ordering = ('-added_at',)
class Order(models.Model):
order_number = models.CharField(max_length=255, default='')
client = models.CharField(max_length=255, default='')
status = models.CharField(max_length=255, default='')
added_at = models.DateTimeField(auto_now_add=True)
クライアントフィルターは基本的に無視されます。 icontainsをexactに置き換えると、機能します。
しかし、どのフィールドでも機能するコンテインやアイコンを取得できません。
Requirements.txt:
Django == 1.10.4
psycopg2 == 2.6.2
djangorestframework == 3.5.3
チャネル== 1.0.0
djangorestframework-jwt == 1.9.0
django-filter == 1.0.1
asgi-redis == 1.0.0
daphne == 1.0.0
こんにちは@xtrinch。
説明から問題がわかりません。 FilterSet
のqs
プロパティにブレークポイントを設定して、何が起こっているかを確認することをお勧めします。
簡単なテストケースに絞り込むことができれば、それも役に立ちます。
Filter
は値を取得し、ORMのルックアップを作成するだけなので、問題は、_どこが間違っているのか?_です。
こんにちは@ xtrinch-クエリパラメータを使用してサンプルURLを投稿できますか? 私の推測では、あなたが照会しているということです/api/orders?status=foo
の代わりに/api/orders?status__icontains=foo
。 Meta.fields
ドキュメントには、 exact
ルックアップのわずかに異なる動作を説明するメモがあります。
@rpkilbyありがとう。 配列の最初の項目がデフォルトのフィルターになるという印象を受けました-私は間違っていたようです:)
あなたの投稿は私のプロジェクトで私にとって非常に役に立ちます
ありがとう
最も参考になるコメント
こんにちは@ xtrinch-クエリパラメータを使用してサンプルURLを投稿できますか? 私の推測では、あなたが照会しているということです
/api/orders?status=foo
の代わりに/api/orders?status__icontains=foo
。Meta.fields
ドキュメントには、exact
ルックアップのわずかに異なる動作を説明するメモがあります。