我正在努力在模型中序列化ManyToMany关系的祖父母。在产品序列化程序中,我要Category
根据上的SubCategory
选择列出顶层Product
。我的代码结构如下:
models.py
class Category(models.Model):
...
name = models.CharField(
_('category name'),
max_length=255,
unique=False
)
...
class SubCategory(models.Model):
parent = models.ForeignKey(
Category,
on_delete=models.CASCADE,
related_name='children',
)
name = models.CharField(
_('category name'),
max_length=255,
unique=False
)
...
class Product(models.Model):
name = models.CharField(
_('product name'),
max_length=255,
unique=True
)
category = models.ManyToManyField(
SubCategory,
related_name='products'
)
...
serializers.py
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['name']
class ProductsSerializer(serializers.ModelSerializer):
...
category = serializers.StringRelatedField(read_only=True, many=True)
parent_category = CategorySerializer(read_only=True, source='category.parent', many=True)
...
class Meta:
model = Product
fields = (
...
'parent_category',
'category',
...
)
当前,字段parent_category不在json-response中显示。
编辑:serializers.py:
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['name']
class ProductSubCategorySerializer(serializers.ModelSerializer):
class Meta:
model = SubCategory
fields = ['name']
class ProductsSerializer(serializers.ModelSerializer):
...
subcategory = ProductSubCategorySerializer(many=True, source='category')
category = ProductCategorySerializer()
...
class Meta:
model = Product
fields = (
...
'category',
'subcategory',
...
)
电流输出:
[
{
"subcategory": [
{
"name": "sub category name",
"category": {
"name": "main category name"
}
},
],
}
]
希望的输出:
[
{
"category": [
{
"name": "main category name"
},
...
],
"subcategory": [
{
"name": "sub category name",
},
...
],
}
]
完整的serializers
设置必须是这样的:
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['name']
class ProductSubCategorySerializer(serializers.ModelSerializer):
category = ProductCategorySerializer(source="parent")
class Meta:
model = SubCategory
fields = ['name', 'category']
class ProductsSerializer(serializers.ModelSerializer):
...
subcategory = ProductSubCategorySerializer(many=True, source='category')
...
class Meta:
model = Product
fields = (
...
'subcategory',
...
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句