You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework接口链接重复问题求助

解决DRF中同一模型多视图集导致API首页链接重复的问题

我完全懂这种重复链接的糟心感!别慌,这是用Django REST Framework(DRF)处理同一模型多视图集时的常见小问题,解决起来很简单。

问题根源

DRF的DefaultRouter会自动根据视图集queryset对应的模型生成basename(URL名称的前缀)。因为你的两个视图集都基于Message模型,它们的默认basename会都是message,这就造成了URL名称冲突,最终导致API根页面显示重复的链接。

解决方案:注册视图集时指定不同的basename

只需要在urls.py注册视图集时,给每个视图集加上独一无二的basename参数即可:

from consumptions.routers_views import MessageViewSet, MessageSapViewSet
# 为每个视图集指定不同的basename
router.register(r'messages', MessageViewSet, basename='message')
router.register(r'messagesforsap', MessageSapViewSet, basename='message-sap')

为什么这样有效?

basename是DRF生成URL名称的核心标识,指定不同值后,router会为两个视图集生成完全独立的URL名称(比如message-list和message-sap-list),API根页面就能正确区分两个端点,不会再出现重复链接了。

额外提示(可选)

如果以后你把MessageSapSerializer改成HyperlinkedModelSerializer,记得要在序列化器里指定对应的view_name,比如:

class MessageSapSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer(allow_null=True)
    class Meta:
        model = Message
        fields = [ "user", "date", "content", "read", "deleted" ]
        # 对应上面指定的basename加上-action名称
        view_name = 'message-sap-detail'

不过你现在用的是ModelSerializer,这一步暂时不需要。

修改完成后重启服务,再打开API首页,两个链接就能正常显示且不重复啦!

内容的提问来源于stack exchange,提问作者AngelQuesada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:28:10