Вложенный сериализатор (глубина / уровень 3) - PullRequest
0 голосов
/ 08 июля 2019

Попытка добавить 3-й вложенный сериализатор с помощью django rest framework как добавить 3-ю вложенную реализацию в данный код -

models.py

class Category(models.Model):
    cate_id = models.AutoField(primary_key=True)
    cate_name = models.CharField(max_length=45)                    
    class Meta:
        managed = False
        db_table = 'category'

class SubCategory(models.Model):
    sub_cate_id = models.AutoField(primary_key=True)
    sub_cate_name = models.CharField(max_length=45)
    sub_fk = models.ForeignKey('Category', models.CASCADE, db_column='sub_fk')

    class Meta:
        managed = False
        db_table = 'sub_category'


class Products(models.Model):
    pro_id = models.AutoField(primary_key=True)
    pro_name = models.CharField(max_length=45)
    description = models.CharField(max_length=45, blank=True, null=True)
    price = models.IntegerField()
    quantity = models.IntegerField()
    pro_cate_fk = models.ForeignKey('Category', models.CASCADE, db_column='pro_cate_fk')
    pro_sub_fk = models.ForeignKey('SubCategory', models.CASCADE, db_column='pro_sub_fk')
    image = models.CharField(max_length=205)

    class Meta:
        managed = False
        db_table = 'products'
from rest_framework import serializers
from .models import Category,SubCategory,Products

class ProductsSerializer(serializers.ModelSerializer):
    # x= ChildTable.objects.all().values
    class Meta:
        model  = Products
        fields = ('pro_id','pro_name','description','price','quantity','image')

class SubCategorySerializer(ProductsSerializer):
    products_set = ProductsSerializer(many=True, read_only=True)

    class Meta:
        model  = SubCategory
        fields = ('sub_cate_name','sub_cate_id','products_set')

class CategorySerializer(SubCategorySerializer):
    subcategory_set = ProductsSerializer(many=True, read_only=True,)
    # pro_subcate_set = SubCategorySerializer(many=True, read_only=True)

    class Meta:
        model  = Category
        fields = ('cate_name','cate_id','subcategory_set')

Получил эту ошибку при попытке -

Got AttributeError when attempting to get a value for field `pro_name` on serializer `ProductsSerializer`. The serializer field might be named incorrectly and not match any attribute or key on the `SubCategory` instance. Original exception text was: 'SubCategory' object has no attribute 'pro_name'.

Можно ли подключить 2 уже подключенных сериализатора к другому сериализатору?

1 Ответ

0 голосов
/ 09 июля 2019

Сделайте тест и посмотрите, работает ли он.

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ('cate_id', 'cate_name')

class SubCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = SubCategory
        fields = ('sub_cate_id', 'sub_cate_name', 'sub_fk')

    def to_representation(self, instance):
        response = super().to_represntation(instance)
        response['sub_fk'] = CategorySerializer(instance.sub_fk).data
        return response

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = ('pro_id', 'pro_name', 'description', 'price', 'quantity', 'pro_cate_fk', 'pro_sub_fk', 'image')

    def to_representation(self, instance):
        response = super().to_representation(instance)
        response['pro_cate_fk'] = CategorySerializer(instance.pro_cate_fk).data
        response['pro_sub_fk'] = ProductSerializer(instance.pro_sub_fk).data
        return response
...