で定義されたフィルタフィールドにそれが可能であるdjango.contrib.postgres.fields
のようにArrayField
?
django-filterには現在、postgrescontribフィールドと互換性のあるフィルターがありません。独自のフィルターを作成する必要があります。 あなたがやろうとしていることに応じて、それは多かれ少なかれ難しいでしょう。 ArrayField
のカスタムルックアップをサポートすることは、かなり簡単です。
class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
pass
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c
上記のフィルターは、コンマ区切りの入力を検証し、基になる.filter()
呼び出しに適したクリーンな値のリストを返します。
一方、構造化されておらず、理論的には無限の組み合わせを持つインデックス変換とスライス変換を処理するのは少し複雑です。
情報をありがとう。
とりあえず、これを範囲外として閉じます。 文書化され、テストされたプルリクエストを検討してください。 将来的には再考する可能性があります。
アップデート:
パラメータname
はfield_name
名前が変更されたため、 MyFilterSet
は次のようになります。
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
最も参考になるコメント
django-filterには現在、postgrescontribフィールドと互換性のあるフィルターがありません。独自のフィルターを作成する必要があります。 あなたがやろうとしていることに応じて、それは多かれ少なかれ難しいでしょう。
ArrayField
のカスタムルックアップをサポートすることは、かなり簡単です。上記のフィルターは、コンマ区切りの入力を検証し、基になる
.filter()
呼び出しに適したクリーンな値のリストを返します。一方、構造化されておらず、理論的には無限の組み合わせを持つインデックス変換とスライス変換を処理するのは少し複雑です。