gpt4 book ai didi

python - Django Rest Framework RelatedField 无法返回字典对象

转载 作者:行者123 更新时间:2023-12-04 15:59:04 25 4
gpt4 key购买 nike

我有一个序列化程序,我想使用 serializers.RelatedField,这样我就可以操作序列化程序的其中一个字段的内容。我希望该字段嵌套相关表中的几个字段。

这是我的序列化器和 serializer.RelatedField。我希望“城市”字段返回一个嵌套对象,其中包含相关城市的“ID”和“名称”:

class CityRelatedField(serializers.RelatedField):
def to_representation(self, value):
city = {
'id': value.id,
'name': value.name
}

return city

class AirportSerializer(serializers.ModelSerializer):
city = CityRelatedField(queryset=models.City.objects.all())

class Meta:
model = models.Airport
fields = ('id', 'city', 'name', 'iata')

这是我得到的错误:TypeError: unhashable type: 'dict'

感谢您的帮助。

最佳答案

最近的 Django Rest Framework 更新似乎默认选择了从 to_representation 的结果中检索的字段。

文件位置:venv/lib/python3.6/site-packages/rest_framework/relations.py在 RelatedField 类下,查看 get_choices 方法。

Opened issue

可能的解决方案:reference link

from collections import OrderedDict

class ModifiedRelatedField(serializers.RelatedField):
def get_choices(self, cutoff=None):
queryset = self.get_queryset()
if queryset is None:
# Ensure that field.choices returns something sensible
# even when accessed with a read-only field.
return {}

if cutoff is not None:
queryset = queryset[:cutoff]

return OrderedDict([
(
item.pk,
self.display_value(item)
)
for item in queryset
])

class CityRelatedField(ModifiedRelatedField):
def to_representation(self, value):
city = {
'id': value.id,
'name': value.name
}

return city

class AirportSerializer(serializers.ModelSerializer):
city = CityRelatedField(queryset=models.City.objects.all())

class Meta:
model = models.Airport
fields = ('id', 'city', 'name', 'iata')

希望对您有所帮助。

关于python - Django Rest Framework RelatedField 无法返回字典对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50973569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com