我有一个视图,允许我将多个条目发布到模型。目前,如果我添加所有新条目,它们将成功添加。但是如果我添加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方法中再次编写一些自定义逻辑。