【问题标题】:Contains or in filtering using DRF包含或正在使用 DRF 过滤
【发布时间】:2018-07-15 06:23:32
【问题描述】:

我有一个简单的博客应用程序,其中包含带有 ManyToManyField 的模型 Entry,称为标签

模型

class Tag(models.Model):
    name = models.CharField(max_length=30)

class Entry(models.Model):
    ...
    tags = models.ManyToManyFiled(Tag)
    ...

我还有一个过滤器类django_filters.rest_framework.FilterSet,它应该能够过滤包含传递给请求的唯一标签或标签+其他的条目。


如何实现 FilterSet 类字段,以便在我传递到请求标签的 id 时能够以这种方式进行过滤?

【问题讨论】:

    标签: django django-rest-framework django-filter


    【解决方案1】:

    使用 filter_backends 和 filter_fields 实现您的视图集

    class EntryList(generics.ListAPIView):
       queryset = Entry.objects.all()
       serializer_class = EntrySerializer
       filter_backends = (DjangoFilterBackend,)
       filter_fields = ('tags',')
    

    如果你想通过 URL 参数进行过滤,那么你的 URL 将与此类似:

    example.com/api/entry?tag=mytag

    【讨论】:

    • 我的意思是我可以传递标签的 id 并获得带有这些标签的条目,或者带有这些标签 + 额外的条目。我想那将是 2 个不同的过滤器
    • 在这种情况下,您需要覆盖视图中的 get_queryset 方法,并使用您需要的值手动过滤查询集。看看这个链接:django-rest-framework.org/api-guide/filtering/…
    • FilterSet类中没有办法做到这一点吗?感谢您的回答!
    • 也许吧。尝试使用 filter_fields = ('tags_id',') 但我认为在你的情况下你需要一个特殊的 get_queryset
    猜你喜欢
    • 2018-11-19
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多