在Django Rest Fram中接受URL或PK作为过滤器

2024-04-20 13:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将Django Rest框架升级到当前版本。有了新的过滤功能,我发现如果有几个外键字段,任何外键字段都需要很长时间才能加载到初始页面(下面我使用的示例是event是{}模型上的FK)。也就是说,我使用filter_class并传递FK-in-Meta-fields列表:

# 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

此URL不: http://website.com/api/tickets/?event=http://website.com/api/events/19919/

我愿意接受任何一个。显然NumberFilter只能处理一个数字,而不是一个URL——我如何使用一个可以接受这两种格式的过滤器呢?在


Tags: comeventapihttpurlfieldsmywebsite
1条回答
网友
1楼 · 发布于 2024-04-20 13:01:23

你真的应该试着去掉前端代码中的第二种形式。对这个完整url参数的任何支持都只是一种解决糟糕设计的方法,而糟糕的设计会一次又一次地伤害你。在

如果这不可能,请重载ViewSet的get或{}(前面没有代码,因此无法判断哪一个最有效)方法,并使用regex从url获取id并将其放回request.GET-这有点棘手,因为它是只读的,因此必须克隆它,修改克隆并将其分配回请求。在

相关问题 更多 >