首页 > 解决方案 > 加入 2 个表时出现属性错误

问题描述

有 2 个表类别 sub_category 我想通过公共列 id 加入,类别。这样做时我收到属性错误。我首先想要类别的数据,然后是 sub_category 的数据。

模型.py:

class Category(models.Model):
    category = models.CharField(max_length=50)
    image = models.CharField(max_length=500)
    store_image = models.CharField(max_length=1000)
    is_active = models.IntegerField()
    parent_id = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'category'


class SubCategory(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE, db_column='category')
    sub_category = models.CharField(max_length=50)
    is_active = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'sub_category'

视图.py:

class CategoryView(generics.GenericAPIView):

    def post(self, request):
        queryset = Category.objects.all().exclude(parent_id=0)
        serializer = CategorySerializer(queryset, many=True)
        return Response(serializer.data)

序列化器.py:

class SubCategorySerializer(serializers.ModelSerializer):

    class Meta:
        fields = ["id", "category", "sub_category", "is_active"]
        model = SubCategory


class CategorySerializer(serializers.ModelSerializer):
    sub_category_data = SubCategorySerializer(read_only=True, source='id')

    class Meta:
        fields = ["id", "category", "image", "is_active", "parent_id","sub_category_data"]
        model = Category

错误:

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

标签: djangodjango-rest-framework

解决方案


您可以将序列化程序更改为

class SubCategorySerializer(serializers.ModelSerializer):
    class Meta:
        fields = ["id", "category", "sub_category", "is_active"]
        model = SubCategory

class CategorySerializer(serializers.ModelSerializer):
    sub_category_data = serializers.SerializerMethodField()

    class Meta:
        fields = ["id", "category", "image", "is_active", "parent_id", 
                 "sub_category_data"]
        model = Category

    @staticmethod
    def get_sub_category_data(obj):
        sub =  SubCategory.objects.filter(category_id=obj.id)
        return SubCategorySerializer(sub, many=True).data

推荐阅读