首页 > 解决方案 > Django嵌套序列化在读取时不序列化

问题描述

我知道这个问题很受欢迎,但无法弄清楚。

class SpaceTypeSerializer(serializers.ModelSerializer):

    class Meta:
        model = SpaceType
        fields = ['id', 'company_id', 'label', 'value', 'active']

class SpaceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Space
        # space_type = serializers.PrimaryKeyRelatedField(
        #     queryset=SpaceType.objects.all())
        space_type = SpaceTypeSerializer(read_only=True)
        fields = ['id', 'location_id', 'name', 'description',
                  'active', 'space_type', 'group_reservations_active', 'seats']

我得到的只是该space_type领域的 id。我尝试了注释掉的部分并得到了完全相同的结果。

class Space(Model):
    location = ForeignKey(
        Location,
        on_delete=DO_NOTHING,
        blank=False,
        null=False,
        related_name='spaces'
    )
    name = CharField(max_length=255)
    description = TextField(null=True)
    active = BooleanField(default=True)
    space_type = ForeignKey(
        SpaceType,
        on_delete=DO_NOTHING,
        blank=True,
        null=True,
        related_name='spaces'
    )

这是我的模型。不知道还能尝试什么,但我希望我space_type将整个空间类型对象序列化。

这是我的查询:

def get(self, request, pk, format=None):
    space = Space.objects.select_related('space_type').get(pk=pk)
    serializer = SpaceSerializer(space)
    return Response(serializer.data)

不确定我是否需要select_related将其放入其中以进行验证。

标签: djangodjango-rest-framework

解决方案


Idk 你把嵌套的序列化器放在哪里Meta,但显然不是这样,这是一个工作版本

class SpaceSerializer(serializers.ModelSerializer):
    space_type = SpaceTypeSerializer(read_only=True)

    class Meta:
        model = Space
        fields = ['id', 'location_id', 'name', 'description',
                  'active', 'space_type', 'group_reservations_active', 'seats']

推荐阅读