跨应用使用HyperlinkedRelatedField关联模型时出现URL解析错误求解决
我尝试在跨应用场景下使用HyperlinkedRelatedField关联模型,但访问/snippets/时触发ImproperlyConfigured异常,以下是相关代码及问题详情:
users应用urls.py代码
from django.urls import path from . import views app_name = 'users' urlpatterns = [ path('', views.UserList.as_view(), name='user-list'), path('<int:id>/', views.UserDetail.as_view(), name='user-detail'), ]
snippets应用urls.py代码
from django.urls import path from . import views app_name = 'snippets' urlpatterns = [ path('', views.SnippetList.as_view(), name='snippet-list'), path('<int:pk>/', views.SnippetDetail.as_view(), name='snippet-detail'), path('<int:pk>/highlight/', views.SnippetHighlight.as_view(), name='snippet-highlight'), ]
SnippetSerializer代码
from rest_framework import serializers from . import models class SnippetSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = models.Snippet fields = ['id', 'owner', 'title', 'code', 'highlight', 'linenos', 'language', 'style'] highlight = serializers.HyperlinkedIdentityField(view_name='snippets:snippet-highlight', format='html') owner = serializers.HyperlinkedRelatedField( read_only=True, view_name='users:user-detail' )
报错信息
访问/snippets/时抛出ImproperlyConfigured错误:
无法使用视图名称"users:user-detail"解析超链接关系的URL。你可能未在API中包含相关模型,或错误配置了该字段的
lookup_field属性。
解决方案
问题根源在于HyperlinkedRelatedField默认使用pk作为lookup_field,但users应用的详情URL参数是id,两者不匹配。需要在owner字段中显式指定lookup_field='id':
修改后的owner字段配置:
owner = serializers.HyperlinkedRelatedField( read_only=True, view_name='users:user-detail', lookup_field='id' )
同时需确保项目根urls.py已正确包含两个应用的路由:
from django.urls import include, path urlpatterns = [ path('users/', include('users.urls')), path('snippets/', include('snippets.urls')), ]
内容的提问来源于stack exchange,提问作者todel23
相关产品推荐
相关产品推荐

