나머지 프레임 워크에서 django를 사용하고 있습니다. 나는 ModelA
여부를 필터링 할 ModelAViewSet
에 BooleanFilter
을 추가하려면, 다음Django Rest 프레임 워크 OneToOneField 관련 BooleanFilter
class ModelAViewSet(viewsets.ModelViewSet):
queryset = ModelA.objects.all()
serializer_class = ModelASerializer
:
class ModelA(models.Model):
pass
class ModelB(models.Model):
a = models.OneToOneField(
A, related_name='b')
그리고 나는 뷰셋는 적용했다 :
는 지금은 OneToOne 관계로 모델을 가지고 개체에 관련이있는 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의 최신 버전을 사용한다면'django_filters.rest_framework import FilterSet, filters' 대신 다음을 할 수 있습니다. 서브 패키지의'BooleanFilter'는 커스텀'BooleanWidget'을 대신 사용합니다. – Sherpa