将列表发布到API,根据该实例的存在进行更新或创建

时间:2017-06-29 15:06:33

标签: serialization django-rest-framework

我有一个视图,允许我将多个条目发布到模型。目前,如果我添加所有新条目,它们将成功添加。但是如果我添加pk已​​经存在的任何条目,它自然会抛出序列化器错误并且没有任何更新。

我希望编写一个允许我发布多个条目的方法,但是会自动更新现有条目,或者根据该实例的存在成功添加新条目。

自定义ListSerialzer的想法是我遇到的最接近的事情,但是如果我能做到这一点仍然不清楚。

有没有人实现过这样的事情?

在views.py中:

def post(self,request,format=None):
    data = JSONParser().parse(request)
    serializer = PanelSerializer(data=data,many=True)
    if serializer.is_valid():
        serializer.save()
        return JsonResponse({"success":"true","content":serializer.data}, status=201)
    return JsonResponse({'success': "false",'errorCode':"1",'errorMessage':serializer.errors}, status=400)

在serializers.py中:

  class PanelSerializer(serializers.ModelSerializer):
         class Meta:
         model = Panel
         fields = ('pId','pGuid','pName', 'pVoltage', 'pAmperage','pPermission', 'pPresent', 'pSelf','pInfo')

     def create(self, validated_data):
        logger.info('Information incoming_1!')
        print ("Atom")
        return Panel.objects.create(**validated_data)

     def update(self, instance, validated_data):
        instance.pId = validated_data.get('pId', instance.pId)
        instance.pGuid = validated_data.get('pId', instance.pGuid)
        instance.pName = validated_data.get('pName', instance.pName)
        instance.pVoltage = validated_data.get('pVoltage', instance.pVoltage)
        instance.pAmperage = validated_data.get('pAmperage', instance.pAmperage)
        instance.pPermission = validated_data.get('pPermission', instance.pPermission)
        instance.pPresent = validated_data.get('pPresent', instance.pPresent)
        instance.pSelf = validated_data.get('pSelf', instance.pSelf)
        instance.pInfo = validated_data.get('pInfo', instance.pInfo)
        instance.save()
        return instance

这就是代码截至目前的情况。我相信我将主要需要处理我的序列化程序的更新方法或首先将其更改为ListSerializer并在update方法中再次编写一些自定义逻辑。

0 个答案:

没有答案