我正在尝试使用除pk之外的替代ID来获取超链接,但是我收到了错误:
无法使用视图名称“foos-detail”解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误地配置了
lookup_field
属性。在处理上述异常时(反向'foos-detail'带参数'()'和关键字参数'{'pk':27}'找不到.2个模式试过:['api / foos /(?P[^/.]+)\.(?P[a-z0-9]+)/?$','api / foos /(?P [^ /。] +)/ $']) ,另一个例外:
串行:
class FooSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='foos-detail', format='html')
class Meta:
model = Foo
fields = ('url', 'alt_id', 'created', 'modified', 'name')
视图集:
class FooViewSet(viewsets.ModelViewSet):
queryset = Foo.objects.all()
serializer_class = FooSerializer
lookup_field = 'alt_id'
的url:
router = DefaultRouter()
router.register(r'foos', FooViewSet, 'foos')
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
编辑:这绝对是尝试使用lookup_field的结果。删除视图集中的lookup_field会导致为pk正确显示超链接。
答案 0 :(得分:0)
您缺少view_name中的命名空间:
url = serializers.HyperlinkedIdentityField(view_name='rest_framework :foos-detail', format='html')
答案 1 :(得分:0)
这花了我几个小时,我终于成功了。在Meta类上进行识别后,请尝试以下方法:
将您的'字段列表命名为'或者' field-detail'遵循共同习惯
在它们之前添加命名空间以使restframework正常工作,例如
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users':reverse('snippets:user-list', request=request, format=format),
'snippets':reverse('snippets:snippet-list',request=request, format=format)
})
使var url清除.HyperlinkedModelSerializer
url = serializers.HyperlinkedIdentityField(view_name="snippets:user-detail")