私はrest-frameworkでdjangoを使用しています。Django RestフレームワークOneToOneField関連BooleanFilter
は、今私はOneToOne関係を搭載したモデルがあります:
class ModelA(models.Model):
pass
class ModelB(models.Model):
a = models.OneToOneField(
A, related_name='b')
をそして、私は上のビューセットを適用した。その後
class ModelAViewSet(viewsets.ModelViewSet):
queryset = ModelA.objects.all()
serializer_class = ModelASerializer
、私はModelA
かどうかをフィルタリングするModelAViewSet
にBooleanFilter
を追加したいですオブジェクトには、関連するModelB
オブジェクトがあります。
そして、私は以下試した:それが動作するかどう
class ModelAViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
has_b = filters.BooleanFilter('b')
queryset = ModelA.objects.all()
serializer_class = ModelASerializer
filter_fields = ['has_b']
だから、我々が得た:
?has_b=1
:フィルタリングをせずにすべてのレコードを返します。?has_b=2
:関連するModelA
オブジェクトを返す。?has_b=3
:返信するレコードいいえがあります。ModelA
オブジェクトです。
上記のケース3を除いてほとんど機能しました。
これを行う正しい方法は何ですか?
は、なぜあなたは、ブールフィルターに番号を渡していますか? – Sayse
私はブール結果ではない関連OneToOneFieldを渡しますが、私はクエリーセットの検索文字列を作成する必要がありますが、解決策を見つけることができます。 –
@Sayseデフォルトのウィジェットは、djangoの[NullBooleanSelect](https://github.com/django/django/blob/1.10/django/forms/widgets.py#L561-L589)です。これらの選択肢を使用します。 django-filterの最新バージョンを使用している場合は、 'from django_filters.rest_framework import FilterSet、filters'を実行することができます。サブパッケージの 'BooleanFilter'は代わりにカスタム' BooleanWidget'を使います。 – Sherpa