更新部分序列化器数据

我正在使用Job.objects.create()手动创建模型实例,但是我想使用self.serializer.create(),但是我不知道如何添加剩余的部分数据。 现在我只想要

class JobCreationView(generics.CreateAPIView):
    queryset = Job.objects.all()
    serializer_class = JobCreatorSerializer

    def create(self,request,*args,**kwargs):
        rounds = RoundSerializer(data=request.data['rounds'],many=True)
        rounds.is_valid(raise_exception=True)

        eligibility = EligibilitySerializer(data=request.data['eligibility'])
        eligibility.is_valid(raise_exception=True)

        job = self.serializer_class(data=request.data['basic'],partial=True)
        job.is_valid(raise_exception=True)

        # after running all `is_valid` we confirm that there is no error

        data = dict(request.data)
        del data['rounds']
        del data['eligibility']

        job = Job.objects.create(
            **data['basic],# company can't be null
            company=request.user.account.company,# eligibility can't be null
            eligibility=eligibility.save()
        )
        job.rounds.set(rounds.save())

        return Response({
            'detail': f'Created Job {job.id}'
        },status=201)

我想要这样的东西

        rounds = RoundSerializer(data=request.data['rounds'],partial=True)
        job.is_valid(raise_exception=True)

        job.validated_data['eligibility'] = eligibility.save()
        job.save()

        job.rounds.set(rounds.save())

实际问题是在检查is_valid之后如何更新序列化器数据。

panlikq 回答:更新部分序列化器数据

实际上,您不需要更新数据。您可以将额外的值直接传递给.save()方法。 See this part of documentation

serializer = SomeSerializer(data=some_data,partial=True)
serializer.is_valid(raise_exception=True)
serializer.save(some_exta_data=value1,some_exta_data2=value2)

所以

class JobCreationView(generics.CreateAPIView):
    queryset = Job.objects.all()
    serializer_class = JobCreatorSerializer

    def create(self,request,*args,**kwargs):
        rounds = RoundSerializer(data=request.data['rounds'],many=True)
        rounds.is_valid(raise_exception=True)

        eligibility = EligibilitySerializer(data=request.data['eligibility'])
        eligibility.is_valid(raise_exception=True)

        job = self.serializer_class(data=request.data['basic'],partial=True)
        job.is_valid(raise_exception=True)

        job.save(eligibility=eligibility.save(),company=request.user.account.company)
        job.rounds.set(rounds.save())

        return Response({
            'detail': f'Created Job {job.id}'
        },status=201)
本文链接:https://www.f2er.com/3087632.html

大家都在问