Django rest framework 在CreateAPIView中的何处添加默认值?

Django rest framework 在CreateAPIView中的何处添加默认值?,django-rest-framework,Django Rest Framework,我有一个ListCreateAPIView,如果request.DATA未提供,我想在其上用默认值填充一个字段 问题是:我应该在哪里做 我无法修改request.DATA,因为它是不可变的,我不想复制/粘贴CreateMixin实现 这是我的密码: class ObjectiveList(generics.ListCreateAPIView): model = Objective serializer_class = ObjectiveSerializer permiss

我有一个ListCreateAPIView,如果request.DATA未提供,我想在其上用默认值填充一个字段

问题是:我应该在哪里做

我无法修改request.DATA,因为它是不可变的,我不想复制/粘贴CreateMixin实现

这是我的密码:

class ObjectiveList(generics.ListCreateAPIView):
    model = Objective
    serializer_class = ObjectiveSerializer
    permission_classes = (permissions.IsAuthenticated,)

    def create(self, request, *args, **kwargs):

        # provide a default value
        objective_definition_id = request.DATA.get('objective_definition',-1)
        data = request.DATA.copy()
        if objective_definition_id == -1:
            # support for 0.9.1 version of iOS and below
            logger.info(str(self.request.DATA))
            mission_url = request.DATA["mission"]
            objectivedefinition_pk = self.default_objectivedefinition_id(mission_url)
            data["objective_definition"]=objectivedefinition_pk

        # I would want to do something like this but I can't
        # request.DATA = data
        # super(ObjectiveList,self).create(request, *args, **kwargs)

        # copy/paste of the super class implementation
        serializer = self.get_serializer(data=data, files=request.FILES)

        if serializer.is_valid():
            self.pre_save(serializer.object)
            self.object = serializer.save(force_insert=True)
            self.post_save(self.object, created=True)
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED,
                    headers=headers)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是我的序列化程序:

class ObjectiveSerializer(serializers.HyperlinkedModelSerializer):
    objective_definition = serializers.PrimaryKeyRelatedField(many=False, read_only=False, required=False, default=toto)

    class Meta:
        model = Objective
        fields = (
            'url',
            'objective_definition',
        )
您可以在字段中使用default=参数,但不知道这是否符合您的用例?

您的意思是default=此处:?我试试看。同时,我编辑了我的问题,提供了更多细节。PrimaryKeyRelatedField似乎没有默认值。它确实接受默认参数,就像所有其他字段一样。如果你不提供任何数据,我没有仔细检查它是否被使用。如果您可以提供一个包含失败测试的pull请求,那么我将研究如何修复任何缺陷