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
相关产品推荐
相关产品推荐

