【问题标题】:Accepting a URL or a PK as a filter in Django Rest Framework在 Django Rest Framework 中接受 URL 或 PK 作为过滤器
【发布时间】:2016-04-29 11:47:30
【问题描述】:

我正在将 Django Rest Framework 升级到当前版本。有了新的过滤功能,我发现如果有多个外键字段,加载初始页面需要很长时间(我在下面使用的示例是 event 是 @ 上的 FK 987654324@ 型号)。也就是说,我正在使用filter_class 并在元字段列表中传递 FK:

# my viewset
class TicketViewSet(ModelViewSet):
    queryset = Ticket.objects.all()
    filter_class = api_filters.TicketFilterSet


#my filterset
class TicketFilterSet(FilterSet):
    event = django_filters.NumberFilter(name="event")

    class Meta:
        model = Ticket
        fields = ["event", ]

在此示例中,传递这样的 URL 有效: http://website.com/api/tickets/?event=19919

此网址不会: http://website.com/api/tickets/?event=http://website.com/api/events/19919/

我希望能够接受任何一个。显然NumberFilter 仅适用于数字,而不适用于 URL——我如何使用可以接受任何一种格式的过滤器?

【问题讨论】:

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


    【解决方案1】:

    您确实应该尝试摆脱前端代码中的第二种形式。对完整 url 参数的任何支持都只是不良设计的变通方法,不良设计会一次又一次地伤害您。

    如果这不可能,请重载 ViewSet 的 getdispatch(我面前没有代码,所以无法判断哪个最适合)方法并使用正则表达式从中获取 id url 并将其放回request.GET - 这有点棘手,因为它是只读的,因此您必须克隆它,修改克隆并将其分配回请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-03
      • 2019-12-23
      • 2018-02-02
      • 2019-04-21
      • 2017-12-28
      • 2014-06-06
      • 2013-05-21
      • 2019-04-19
      相关资源
      最近更新 更多