Python 如何使drf HyperlinkedModelSerializer与app_name完美配合?
我在django项目中使用drfPython 如何使drf HyperlinkedModelSerializer与app_name完美配合?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在django项目中使用drf #项目/url.py 从django.url导入包括,路径 URL模式=[ ... 路径('drf/',include('api.url')), ... ] 在专用应用程序中,我通过app_name命名如下: #api/url.py 从django.url导入包括,路径 从rest_框架导入路由器 从…起导入视图 应用程序名称='drf' 路由器=路由器。SimpleRouter() router.register('segments',View.Segmen
#项目/url.py
从django.url导入包括,路径
URL模式=[
...
路径('drf/',include('api.url')),
...
]
在专用应用程序中,我通过app_name命名如下:
#api/url.py
从django.url导入包括,路径
从rest_框架导入路由器
从…起导入视图
应用程序名称='drf'
路由器=路由器。SimpleRouter()
router.register('segments',View.SegmentViewSet)
URL模式=[
路径(“”,包括(router.url)),
]
#api/serializers.py
从rest_框架导入序列化程序
从段。模型导入段
类分段序列化程序(serializers.HyperlinkedModelSerializer):
类元:
模型=段
字段=['id','url','name']
#api/views.py
从rest\U框架导入视图集
从.serializers导入段序列化程序
从段。模型导入段
类分段视图集(viewsets.ModelViewSet):
queryset=Segment.objects.all()
serializer\u class=段序列化程序
调用端点/drf/segments/会导致以下错误:
在/drf/段配置不当/
无法使用视图名称“段详细信息”解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误配置了“lookup\u field”属性。
请求方法:获取
请求URL:http://localhost:8000/drf/segments/
Django版本:2.2.7
Python可执行文件:/Users/udos/.virtualenvs/ts/bin/Python
Python版本:3.6.4
.
.
.
要“修复”此问题,我必须向序列化程序添加以下代码:
url = serializers.HyperlinkedIdentityField(
view_name='drf:segment-detail',
)
导致:
#api/serializers.py
从rest_框架导入序列化程序
从段。模型导入段
类分段序列化程序(serializers.HyperlinkedModelSerializer):
url=serializers.HyperlinkedEntityField(
视图\u name='drf:段详细信息',
)
类元:
模型=段
字段=['id','url','name']
我必须为所有实体这样做(我希望避免这样做)
有没有办法不用额外的代码来处理这个问题?要调用/设置的一些神奇方法/属性?能否尝试明确传递命名空间:
path(“”,include(router.url,namespace='drf'))
?将其添加到api/url.py
会导致错误django.core.exceptions。配置不当:不支持在include()中指定命名空间而不提供应用程序名称。在包含的模块中设置app_name属性,或者传递一个包含模式列表和app_name的2元组。
不要删除app_name
:|我没有。我使用了path(“”,include(router.url,namespace=app_name))
我正在尝试做完全相同的事情。您是否设法解决了此问题?能否尝试明确传递命名空间:path(“”,include(router.url,namespace='drf'))
?将其添加到api/url.py
会导致错误django.core.exceptions。配置不当:不支持在include()中指定命名空间而不提供应用程序名称。在包含的模块中设置app_name属性,或者传递一个包含模式列表和app_name的2元组。
不要删除app_name
:|我没有。我使用了path(“”,include(router.url,namespace=app_name))
我正在尝试做完全相同的事情。你设法解决了吗?