Django Rest List() 多个序列化程序出错

巴勃罗·埃斯特拉达

我正在尝试创建一个Question模型序列化程序。问题的模型有几个其他车型,从它继承喜欢RangeQuestionYesNoQuestion等。

这是我的观点:

class QuestionViewSet(generics.ListCreateAPIView):
    """
    A viewset that provides `create` actions.
    """
    queryset = Question.objects.all()

    def get_serializer_class(self):
        if 'type' in self.request.data:
            if self.request.data['type'] == 'range':
                return serializers.RangeQuestionSerializer
            elif self.request.data['type'] == 'open':
                return serializers.QuestionSerializer
            elif self.request.data['type'] == 'multiple_choice':
                return serializers.MultipleChoiceQuestionSerializer
            elif self.request.data['type'] == 'yes_no':
                return serializers.YesNoAnswerSerializer
            elif self.request.data['type'] == 'object':
                return serializers.ObjectQuestionSerializer
        else:
            return serializers.QuestionSerializer

    def create(self, request):
        if 'type' in self.request.data:
            serializer = self.get_serializer(data=self.request.data)
            print serializer
            serializer.is_valid(raise_exception=True)
            serializer.save()
            headers = self.get_success_headers(serializer.data)
            return Response(
                serializer.data,
                status=status.HTTP_201_CREATED,
                headers=headers)
        else:
            return Response(status=HTTP_400_BAD_REQUEST, data="Must specify a question type")

这是我的序列化程序:

class QuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    def get_type(self):
        return settings.QUESTION_TYPES['open']

    class Meta:
        model = Question
        exclude = []


class YesNoQuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    def get_type(self):
        return settings.QUESTION_TYPES['yes_no']

    class Meta:
        model = YesNoQuestion
        exclude = []


class RangeQuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    def get_type(self):
        return settings.QUESTION_TYPES['range']

    class Meta:
        model = RangeQuestion
        exclude = []


class QuestionChoiceSerializer(serializers.ModelSerializer):

    class Meta:
        model = QuestionChoice
        exclude = []


class MultipleChoiceQuestionSerializer(serializers.ModelSerializer):
    choices = QuestionChoiceSerializer()
    type = serializers.SerializerMethodField()

    def get_type(self):
        return settings.QUESTION_TYPES['multiple_choice']

    class Meta:
        model = MultipleChoiceQuestion
        exclude = []

当我访问列表操作的 url 时,出现错误:

get_type() takes exactly 1 argument (2 given)

谁能告诉我如何使列表视图显示根据子类序列化的所有问题?

阿杰帕尔

def get_type(self)应该定义您的方法,def get_type(self, instance)因为其余框架序列化程序会将实例作为第一个参数传入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

django rest m2m 序列化程序抛出错误请求错误

如何在Django Rest Framework序列化程序中加入多个模型

在Django Rest Framework 3中使用可写的嵌套序列化程序创建多个对象

Django Rest Framework实例化序列化程序错误

Django REST:上传和序列化多个图像

Django Rest Framework多个嵌套的可写序列化器

Django Rest框架多个外键序列化

Django REST,序列化变量/多个嵌套的 OnetoOne 关系

Django序列化程序与rest_framework序列化程序

Django REST Framework 序列化程序验证错误

Django REST FileUpload序列化程序返回{'file':None}

Django Rest-Framework嵌套序列化程序顺序

django rest 框架創建方法序列化程序

在Django Rest Framework中将HyperlinkedField用于序列化程序

Django REST 框架,序列化程序:附加数据?

Django rest 框架序列化程序密钥错误

Django rest 框架序列化程序外键

Django Rest Framework嵌套的序列化程序部分更新

Django Rest Framework更新嵌套序列化程序

Django Rest Framework序列化程序中的循环依赖

Django REST框架序列化程序中的完整URL

Django REST 框架序列化程序输出

Django Rest Framework 的自定義序列化程序

Django Rest嵌套序列化程序的AttributeError

Django Rest 框架 - 序列化程序不起作用

序列化程序,Django rest框架中的权限检查,

Django Rest序列化程序外键是必需的错误

Django Rest Framework 中用户特定的序列化程序

编写 django rest 序列化程序的问题