我正在将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)?
答案 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