Python Django REST框架-在创建时序列化嵌套关系
我有这两种基于以下型号的Seralizer:Python Django REST框架-在创建时序列化嵌套关系,python,django,rest,frameworks,nested,Python,Django,Rest,Frameworks,Nested,我有这两种基于以下型号的Seralizer: class LanguageSerializer(serializers.ModelSerializer): class Meta: model = Language fields = '__all__' class GameSerializer(serializers.ModelSerializer): language = LanguageSerializer() class Met
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)
当我尝试创建一个新的游戏
实体时,我将此游戏的语言id
作为参数传递。由于某些原因,DRF希望将该语言作为字典
传递,而不是作为整数
传递。以下是错误:
{
"language": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got int."
]
}
}
向DRF指出,根据提供的
语言id
创建具有语言
属性的游戏
的正确方法是什么?创建一个不包含所有语言细节的单独序列化器是一个解决方案。您可以创建一个使用
在返回/列出对象时,可以使用普通的GameSerializer
,然后在创建游戏时使用ShallowGameSerializer
,只需提供id即可
# I always call mine shallow to differentiate between the full serializer
class ShallowGameSerializer(serializers.ModelSerializer):
language = serializers.PrimaryKeyRelatedField()
class Meta:
model = Game
fields = '__all__'