Python 属性错误:';QuerySet';对象没有属性';类别';

Python 属性错误:';QuerySet';对象没有属性';类别';,python,django,django-models,django-rest-framework,django-serializer,Python,Django,Django Models,Django Rest Framework,Django Serializer,我使用DRF从API获取和创建数据。我正在努力解决一个模型问题和一个属性类别,这也是一个模型。所以为了创建和读取数据,我必须实现这个方法。因此,每当我创建一个问题时,它的类别是一个整数,但当我阅读它时,它是一个对象 无论何时使用默认API路由,我都可以创建和读取数据,但无论何时编写不同的路由,我都会遇到以下错误: AttributeError:尝试获取序列化程序问题序列化程序上的字段类别的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与QuerySet实例上的任

我使用DRF从API获取和创建数据。我正在努力解决一个模型
问题
和一个属性
类别
,这也是一个模型。所以为了创建和读取数据,我必须实现这个方法。因此,每当我创建一个问题时,它的类别是一个整数,但当我阅读它时,它是一个对象

无论何时使用默认API路由,我都可以创建和读取数据,但无论何时编写不同的路由,我都会遇到以下错误:

AttributeError:尝试获取序列化程序
问题序列化程序
上的字段
类别
的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与
QuerySet
实例上的任何属性或键都不匹配。 原始异常文本为:“QuerySet”对象没有属性“category”

这是我的自定义代码,哪里出了问题…:

类用户问题(APIView):
权限\u类=[权限.已验证]
def get(自我、请求、*args、**kwargs):
questions=Question.objects.filter(创建者=request.user.id).all()
data=QuestionSerializer(问题)。数据
返回响应({
“问题”:数据
})
以防万一,这是我的答案的实现:


class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField):
    def __init__(self, **kwargs):
        self.serializer = kwargs.pop('serializer', None)
        if self.serializer is not None and not issubclass(self.serializer, serializers.Serializer):
            raise TypeError('"serializer" no es una clase serializer válida')

        super().__init__(**kwargs)

    def use_pk_only_optimization(self):
        return False if self.serializer else True

    def to_representation(self, instance):
        if self.serializer:
            return self.serializer(instance, context=self.context).data
        return super().to_representation(instance)


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'


class QuestionSerializer(serializers.ModelSerializer):
    category = RelatedFieldAlternative(queryset=Category.objects.all(), serializer=CategorySerializer)
    answers = AnswerSerializer(many=True, source='answer_set', allow_null=True, required=False)
    created_by = UserSerializer(required=False)

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

    class Meta:
        model = Question
        fields = '__all__'

那么,我做错了什么呢?

首先,您将多个项传递给序列化程序,因此您应该使用
many=True
。因此,在你的情况下,它将是

data = QuestionSerializer(questions, many=True).data
其次,您不需要relatedFieldAlternative。您可以只使用嵌套的serailizer

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'


class QuestionSerializer(serializers.ModelSerializer):
     category = CategorySerializer()

      class Meta:
         model = Question
         fields = '__all__'

1.我错了,谢谢。2.如果我在创建问题时不添加类别,它将适用。尽管如此,在将
data
更改为
data=QuestionSerializer(questions,many=True,context={'request':request})后,data
仍然有效。非常感谢。