Django REST Framework中的否定或排除过滤器

Fiv*_*ver 5 python django django-filter django-rest-framework

我已经使用Django REST Framework已有很长时间了,但是遇到一种情况,我需要在API视图中检索除已知关系以外的所有内容。再次浏览文档后,我看不到任何内置的机制来实现此目的。我意识到我可以get_queryset()在ListView中覆盖并解析自定义URL查询参数,然后进行过滤,但是我很好奇是否还有其他人有更优雅的解决方案?

更新资料

经过更多研究后,这似乎更多是django-filter问题,我找不到提及任何排除功能的信息。我确实发现了这一点:

https://bitbucket.org/mjs7231/django-rest-framework-filtering

确实提供了从结果中排除的值。

Mar*_*ino 8

exclude在过滤器集中使用过滤器定义中的参数。

class MyFilterSet(FilterSet):
    negated_field__not = django_filters.NumberFilter(name='negated_field', exclude=True)

    class Meta:
        model = Model
        fields = ['some_field', 'some_other_field']

class MyViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Model.objects.all()
    serializer_class = SomeSerializer

    filter_backends = (DjangoFilterBackend,)
    filter_class = MyFilterSet
Run Code Online (Sandbox Code Playgroud)

等同于Model.objects.all().exclude(negated_field__exact=value)。然后,您可以从前端排除类似这样的网址:/api/my_viewset/?negated_field__not=value


Den*_*ehl 4

听起来您正在寻找自定义过滤器后端