超链接关系的URL配置不正确

时间:2017-03-13 17:16:47

标签: python django-rest-framework

我正在尝试使用除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正确显示超链接。

2 个答案:

答案 0 :(得分:0)

您缺少view_name中的命名空间:

url = serializers.HyperlinkedIdentityField(view_name='rest_framework :foos-detail', format='html')

答案 1 :(得分:0)

这花了我几个小时,我终于成功了。在Meta类上进行识别后,请尝试以下方法:

  1. 将您的'字段列表命名为'或者' field-detail'遵循共同习惯

  2. 在它们之前添加命名空间以使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)
    })
    
  3. 使用序列化程序时,
  4. 使var url清除.HyperlinkedModelSerializer

    url = serializers.HyperlinkedIdentityField(view_name="snippets:user-detail")