Django rest framework 如何在Django REST框架中处理嵌套对象
我是Django REST框架的新手。在我的Django模型中,我有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,
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,我们可以控制输出,而,深度不能