gpt4 book ai didi

python - Django REST Framework - 在创建时序列化嵌套关系

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:02 24 4
gpt4 key购买 nike

我有这两个基于以下模型的序列化器:

class LanguageSerializer(serializers.ModelSerializer):

class Meta:
model = Language
fields = '__all__'


class GameSerializer(serializers.ModelSerializer):
language = LanguageSerializer()

class Meta:
model = Game
fields = '__all__'


class Game(models.Model):
language = models.ForeignKey(Language)


class Language(models.Model):
name = models.CharField(max_length=50, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

当我尝试创建新的 Game 实体时,我将此游戏的 Language id 作为参数传递。由于某些原因,DRF 希望语言作为字典而不是整数传递。这是错误:

{
"language": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got int."
]
}
}

向 DRF 指示创建一个基于提供的 Language id 具有 Language 属性的 Game 的正确方法是什么?

最佳答案

创建一个不包含有关语言的所有详细信息的单独序列化程序是一种解决方案。您可以创建一个使用 PrimaryKeyRelatedField() 的单独序列化器

# I always call mine shallow to differentiate between the full serializer
class ShallowGameSerializer(serializers.ModelSerializer):
language = serializers.PrimaryKeyRelatedField()
class Meta:
model = Game
fields = '__all__'

您可以在返回/列出对象时使用普通的GameSerializer,然后在创建游戏时使用ShallowGameSerializer,这样您只需提供id即可。

关于python - Django REST Framework - 在创建时序列化嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40328258/

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