Django REST框架:没有PK的URL

时间:2019-06-03 17:08:51

标签: django django-rest-framework

我正在将Django REST Framework与HyperlinkedModelSerializer

一起使用

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)?

2 个答案:

答案 0 :(得分:1)

这是您应该做的:

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

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

答案 1 :(得分:0)

对于您的url配置,请使用slug而不是pk:

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

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