django - 如何在 Django Rest Framework 中为“HyperlinkedIdentityField”正确设置“lookup_field”?
问题描述
我需要更改默认HyperlinkedModelSerializer
网址。根据文档,我必须url
像这样手动定义字段:
序列化程序.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
像这样使用:
序列化程序.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
正确设置呢?
解决方案
unique_id
通过将字段更改models.py
为 become 来临时解决问题primary_key=True
,以便HyperlinkedModelSerializer
自动用于unique_id
创建 url。
但问题仍然存在:如何HyperlinkedModelSerializer
使用其他字段而不是pk
创建 url?
编辑lookup_field = 'unique_id'
:通过添加和永久修复views.py
问题serializers.py
。
推荐阅读
- c - 使用 c 中的 mpi 变量以外的其他方法解决 mpi 超额订阅
- sql - 从 OPENJSON SQL Server 检索特殊字符的问题
- html - 创造大小稳定,但文本可滚动
- java - 我怎样才能得到一个句子中的确切单词
- recursive-backtracking - 我如何解释这个回溯代码?
- python - 即使在需求已经满足后也没有名为 selenium 的模块:selenium
- grails - Grails - Spring security ldap 活动目录身份验证 - 凭据错误错误
- tomcat - 工厂“javax.faces.lifecycle.ClientWindowFactory”未正确配置
- ios - 设置当前“仅获取”属性值的最佳方法
- powershell - 通过 PowerShell 将 CSV 文件转换为复杂的 XML 数组