【问题标题】:Django REST Framework: URLs without PKDjango REST 框架:没有 PK 的 URL
【发布时间】:2019-06-03 17:08:51
【问题描述】:

我正在使用带有 HyperlinkedModelSerializer 的 Django REST 框架

serializer.py:

class ReportTypesViewSet(viewsets.ModelViewSet):
    queryset = ReportType.objects.all()
    serializer_class = ReportTypesSerializer

api.py:

class ReportTypesSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = ReportType
        fields = ('name', 'uuid', 'active', )

现在 API 可以工作了,但超链接的 URL 中有 pk,例如:http://localhost:8000/api/reporttypes/1/

我想通过 UUID 字段(模型提供)而不是内部 PK 映射对象。我知道我可以将主键更改为 UUID 字段,但我了解到这会导致其他问题,例如性能下降。

有没有办法可以通过 UUID 引用对象,但在内部仍使用默认的 pk (id)?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    这是你应该做的:

    class ReportTypesViewSet(viewsets.ModelViewSet):
        queryset = ReportType.objects.all()
        serializer_class = ReportTypesSerializer
        lookup_field = 'uuid'
    

    这告诉 DRF 您正在使用 uuid 字段进行查找,而不是默认的 pk

    【讨论】:

    • 这适用于附加条件,似乎必须从 fields 元属性中省略“url”。
    【解决方案2】:

    对于您的 url 配置,请使用 slug 代替 pk:

    path(_('api')+'/<slug:slug>/', app.api_view, name='api'),
    

    对于您的模型/序列化器,请确保它同时包含 uuid 和 id

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2018-03-30
      • 2015-07-14
      • 1970-01-01
      • 2018-08-06
      • 2021-09-04
      • 2018-12-10
      • 2013-07-07
      相关资源
      最近更新 更多