我在休息框架中使用django。
现在我有OneToOne关系的模型:
class ModelA(models.Model):
pass
class ModelB(models.Model):
a = models.OneToOneField(
A, related_name='b')
我在A:
上应用了ViewSetclass ModelAViewSet(viewsets.ModelViewSet):
queryset = ModelA.objects.all()
serializer_class = ModelASerializer
然后,我想在BooleanFilter
上添加ModelAViewSet
来过滤ModelA
对象是否有相关的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
:返回 NO NOT 与ModelA
对象相关的记录; 那么正确的方法是什么?
答案 0 :(得分:1)
input
这里有三处变化:
通过从 <cwaRequests xmlns="http://schemas.microsoft.com/2006/09/rtc/cwa" sid="91">
<queryPresence rid="4">
<uris>
<uri>sip:jessicaa@contoso.com</uri>
</uris>
</queryPresence>
</cwaRequests>
子包导入,使用了API友好的from django_filters.rest_framework import FilterSet, filters
class Filter(FilterSet):
has_b = filters.BooleanFilter(name='b', lookup_expr='isnull', exclude=True)
,因此您可以查询rest_framework
而不是BooleanWidget
。
过滤器使用?has_b=true
查找,允许您测试相关模型的存在。
?has_b=1
正在测试相关isnull
的缺少,这与您想要的相反。使用b__isnull=True
会反转逻辑,以便您改为过滤B
代替exclude=True
的内容。
等效的A
来电:
B