我需要更改默认的HyperlinkedModelSerializer
网址。根据文档,我必须像这样手动定义url
字段:
serializers.py
class StockSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='stock-detail', lookup_field='unique_id')
class Meta:
model = Stock
fields = ['id', 'url', 'symbol', 'unique_id', 'other_details']
或像这样使用extra_kwargs
:
serializers.py
class StockSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Stock
fields = ['id', 'url', 'symbol', 'unique_id', 'other_details']
extra_kwargs = {
'url': {'view_name': 'stock-detail', 'lookup_field': 'unique_id'}
}
但是他们都不为我工作。错误是:
django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "stock-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
这是我的views.py
:
class StockViewSet(ModelViewSet):
queryset = Stock.objects.all()
serializer_class = StockSerializer
如果我将lookup_field
更改为pk
(在serializers.py中),它可以正常工作而不会出现任何错误,但是url不是我想要的。那么如何正确设置lookup_field
?
答案 0 :(得分:0)
临时解决了该问题,方法是将unique_id
中的models.py
字段更改为primary_key=True
,以便HyperlinkedModelSerializer
自动使用unique_id
创建URL。
但是问题仍然存在:如何使HyperlinkedModelSerializer
使用pk
以外的其他字段来创建网址?
编辑:通过向lookup_field = 'unique_id'
和views.py
添加serializers.py
来永久解决此问题。