Django REST Framework序列化上的嵌套关系

2024-10-04 01:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种基于以下型号的色拉剂:

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希望该语言作为dictionary而不是integer来传递。错误如下:

^{pr2}$

向DRF指示的正确方法是什么,以创建一个基于所提供的Game属性的Language属性?在


Tags: gametruefieldsmodelmodelsalllanguagemeta
1条回答
网友
1楼 · 发布于 2024-10-04 01:24:18

一种解决方案是创建一个单独的序列化程序,它不包含有关语言的所有详细信息。您可以创建使用^{}的单独序列化程序

# 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

相关问题 更多 >