【问题标题】:Using Django HyperlinkedModelSerializer with prefixed view names使用带有前缀视图名称的 Django HyperlinkedModelSerializer
【发布时间】:2018-04-23 22:07:10
【问题描述】:

我目前正在尝试使用 HyperlinkedModelSerializer,但出现错误:

无法使用视图名称“house-detail”解析超链接关系的 URL

那应该是 backend:house-detail,我的 REST api 中的所有视图都有那个“backend:”前缀。如何让 Django REST 自动添加该前缀?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    但仍然不确定如何自动执行,所以如果我更改前缀,我需要手动更改。

    这是使用基类和继承可以提供帮助的时候

    class PrefixedSerializer(serializers.HyperlinkedModelSerializer):
        prefix = 'backend'
        url = serializers.HyperlinkedIdentityField(
            view_name='{}:house-detail'.format(prefix)
        )
    

    所以现在HouseSerializer 继承自那个基类

    class HouseSerializer(PrefixedSerializer):
        # the other fields
    

    【讨论】:

    • 太棒了!似乎 Django REST 框架没有办法自动执行此操作,但在这里使用继承很好。自己。”虽然确实给出了一个变量未定义的错误,但只需将其删除即可。
    • @user1582024 哦,是的,我并没有真正努力给出正确的语法,而且您可能还必须将house-detail 部分隔离到HouseSerializer 中的变量中,但我希望我帮助您了解如何使用基类执行此操作!
    • 你确实做到了。
    【解决方案2】:

    要手动执行,请执行以下操作:

    class HouseSerializer(serializers.HyperlinkedModelSerializer):
    
        url = serializers.HyperlinkedIdentityField(
            view_name='backend:house-detail'
        )
    
        ...
    

    但仍然不确定如何自动执行,所以如果我更改前缀,我需要手动更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 2011-11-08
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多