Python Django REST框架-在创建时序列化嵌套关系

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

我有这两种基于以下型号的Seralizer:

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