Django Rest Framework RelatedField 无法返回 dict 对象



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

这是我的序列化程序和serializer.RelatedField.我希望"city"字段返回一个嵌套对象,其中包含相关城市的"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 在"相关字段类"下,请参阅get_choices方法。

未解决的问题

可能的解决方案:参考链接

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

希望它会有所帮助。

相关字段通常将相关对象表示为单个值,而不是字典 您需要使用嵌套序列化程序

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

最新更新