Django rest framework 如何在Django REST框架中处理嵌套对象

Django rest framework 如何在Django REST框架中处理嵌套对象,django-rest-framework,Django Rest Framework,我是Django REST框架的新手。在我的Django模型中,我有Store和SimilarStore模型。存储有similarstore\u set,它有多个相似的存储,每个相似的存储都有Store列作为外键,显示其id。但是,我想显示store对象的列,而不仅仅是id 如下面的API示例所示,id为7的存储区有3个类似的存储区,而类似的存储区有store外键,因此它显示匹配的存储区的id号。我想显示它的子列,而不仅仅是idnumber [ { "id": 7,

我是Django REST框架的新手。在我的Django模型中,我有
Store
SimilarStore
模型。存储有
similarstore\u set
,它有多个相似的存储,每个相似的存储都有
Store
列作为外键,显示其
id
。但是,我想显示store对象的列,而不仅仅是
id

如下面的API示例所示,id为
7的存储区有3个类似的存储区,而类似的存储区有
store
外键,因此它显示匹配的存储区的id号。我想显示它的子列,而不仅仅是
id
number

[
    {
        "id": 7,
        "status": "active",
        "businessName": "Ruby Claire Boutique",
            "similarstore_set": [
                {
                    "id": 1182,
                    "store": 7,     <--- wanna show the store's child columns
                },
                {
                    "id": 1208,
                    "store": 7,     <--- wanna show the store's child columns
                },
                {
                    "id": 1249,
                    "store": 7,     <--- wanna show the store's child columns
                }
            ]

    },
    ...
]
型号.py

class SimilarStoreSerializer(ModelSerializer):

    store = StringRelatedField()

    class Meta:
        model = SimilarStore
        fields = ('id', 'store', )


class StoreSerializer(ModelSerializer):

    similarstore_set = SimilarStoreSerializer(many=True)

    class Meta:
        model = Store
        fields = ('id', 'status', 'businessName', 'similarstore_set', )
class Store(models.Model):

    status = CharField(...)
    businessName = CharField(...)
    ...


class SimilarStore(models.Model):

    store = ForeignKey(Store)
    ...
由于您的问题不完整,我假设
相似存储集
是一个反向关系数据,它是在嵌套序列化程序类的帮助下显示的

在这里,您可以尝试两种解决方案,

1.为
存储
模型定义另一个序列化程序,并将其链接到特定的序列化程序中。


2.在
Similarstore
序列化程序的元类中使用
depth
属性


示例
使用
深度

class SimilarStoreSerializer(serializers.ModelSerializer):
    class Meta:
        model = SimilarStore
        fields = '__all__'
        depth = 1


class TopLevelSerializer(serializers.ModelSerializer):
    similarstore_set = SimilarStoreSerializer(many=True)

    class Meta:
        model = someModel
        fields = '__all__'

更新-1

字段添加到
类似序列化器的元类中

class SimilarStoreSerializer(ModelSerializer):
    # removed "store = StringRelatedField()"
    class Meta:
        model = SimilarStore
        fields = ('id', 'store', )
        depth = 1
class-SimilarStoreSerializer(ModelSerializer):
#已删除“store=StringRelatedField()”
类元:
模型=相似存储
字段=('id','store',)
深度=1

更新-2
创建一个StoreMinimalSerializer,并根据需要定义必填字段

class StoreMinimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Store
        fields = (add fields you want,)


class SimilarStoreSerializer(ModelSerializer):
    store = StoreMinimalSerializer()

    class Meta:
        model = SimilarStore
        fields = ('id', 'store',)
类序列化程序(serializers.ModelSerializer):
类元:
型号=商店
字段=(添加所需的字段,)
类SimilarStoreSerializer(ModelSerializer):
store=storeminimaserializer()
类元:
模型=相似存储
字段=('id','store',)
由于您的问题不完整,我假设
相似存储集
是一个反向关系数据,它在嵌套序列化器类的帮助下显示

在这里,您可以尝试两种解决方案,

1.为
存储
模型定义另一个序列化程序,并将其链接到特定的序列化程序中。


2.在
Similarstore
序列化程序的元类中使用
depth
属性


示例
使用
深度

class SimilarStoreSerializer(serializers.ModelSerializer):
    class Meta:
        model = SimilarStore
        fields = '__all__'
        depth = 1


class TopLevelSerializer(serializers.ModelSerializer):
    similarstore_set = SimilarStoreSerializer(many=True)

    class Meta:
        model = someModel
        fields = '__all__'

更新-1

字段添加到
类似序列化器的元类中

class SimilarStoreSerializer(ModelSerializer):
    # removed "store = StringRelatedField()"
    class Meta:
        model = SimilarStore
        fields = ('id', 'store', )
        depth = 1
class-SimilarStoreSerializer(ModelSerializer):
#已删除“store=StringRelatedField()”
类元:
模型=相似存储
字段=('id','store',)
深度=1

更新-2
创建一个StoreMinimalSerializer,并根据需要定义必填字段

class StoreMinimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Store
        fields = (add fields you want,)


class SimilarStoreSerializer(ModelSerializer):
    store = StoreMinimalSerializer()

    class Meta:
        model = SimilarStore
        fields = ('id', 'store',)
类序列化程序(serializers.ModelSerializer):
类元:
型号=商店
字段=(添加所需的字段,)
类SimilarStoreSerializer(ModelSerializer):
store=storeminimaserializer()
类元:
模型=相似存储

fields=('id','store',)
你能为你的模型和序列化程序发布你的代码吗?你的问题不包含任何相关的序列化程序,请添加那些用我的代码更新的帖子。你能帮我查一下吗@幻灯片你可以发布你的模型和序列化程序的代码吗?你的问题不包含任何相关的序列化程序,请添加那些用我的代码更新的帖子。你能帮我查一下吗@sliderSorry,我的代码丢失了。我刚刚用我的代码更新了帖子。你能检查一下并编辑你的答案吗?更新了答案:)@JPG你可能应该将
TopLevelSerializer
重命名为
StoreSerializer
。深度将显示所有FK关系,而自定义序列化程序将显示定义的字段如果我们使用CustomSerializer,我们可以控制输出,而,深度不能为我的代码丢失而担心。我刚刚用我的代码更新了帖子。你能检查一下并编辑你的答案吗?更新了答案:)@JPG你可能应该将
TopLevelSerializer
重命名为
StoreSerializer
。深度将显示所有FK关系,而自定义序列化程序将显示定义的字段如果我们使用CustomSerializer,我们可以控制输出,而,深度不能