【问题标题】:Improperly Configured URL for hyperlinked relationship未正确配置超链接关系的 URL
【发布时间】:2017-08-03 19:39:34
【问题描述】:

我正在尝试使用除 pk 之外的替代 id 作为超链接,但是我收到错误消息:

无法使用视图名称“foos-detail”解析超链接关系的 URL。您可能没有在 API 中包含相关模型,或者在此字段上错误地配置了 lookup_field 属性。

在处理上述异常期间(使用参数 '()' 和关键字参数 '{'pk': 27}' 反转'foos-detail'。尝试了 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'

网址:

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 正确显示超链接。

【问题讨论】:

    标签: python django-rest-framework


    【解决方案1】:

    您在 view_name 中缺少命名空间:

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

    【讨论】:

    • 这似乎没有帮助。将命名空间添加到视图名称会导致不尝试任何 url 模式。
    【解决方案2】:

    这花了我几个小时,我终于成功了。在您对 Meta 类进行正确识别后,请尝试以下操作:

    1. 按照常见习惯命名您的“字段列表”或“字段详细信息”

    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. 使用 serializers.HyperlinkedModelSerializer 时使 var url 清晰

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

    【讨论】:

      猜你喜欢
      • 2020-07-30
      • 2021-10-29
      • 1970-01-01
      • 2013-04-19
      • 2018-08-27
      • 2014-05-19
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多