无法使用 Django Rest Framework 更新现有数据?
unable to update existing data using Django Rest Framework?
我是 Django 休息框架的新手,想要更新数据库中的现有数据。
但是代替更新的是将新数据添加到数据库中。
serializers.py
class CustomersSerializer(serializers.Serializer):
lname = serializers.CharField(max_length=10)
fname = serializers.CharField(max_length=10)
def create(self, validated_data):
return Customers.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.fname = validated_data.get('fname', instance.fname)
instance.lname = validated_data.get('lname', instance.lname)
instance.save()
return instance
view.py
def UpdateData(request): # Not Working
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user)
json_data = JSONRenderer().render(serialize.data)
stream = io.BytesIO(json_data)
data = JSONParser().parse(stream)
serializer = CustomersSerializer(data=data)
if serializer.is_valid():
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
serializer.save()
return HttpResponse("Updated..")
如果我的整个过程是错误的,请给我一些好的资源来理解序列化程序和 django rest 框架。
我学到的是 调用 .save() 将创建一个新实例,或更新现有实例,具体取决于在实例化序列化程序时是否传递了现有实例 class .
def UpdateData(request): # Not Working
##payload send in request(fields with value which are changed) in request.data
request_data = request.data
payload = {
'fname' : 'test',
'lname' : 'user'
}
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user,payload,partial=True)
##specify renderers/decoders settings in settings.py/config.py
if serializer.is_valid():
##don't know why you need this.
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
###
serializer.save()
return HttpResponse("Updated..")
return HttpResponse('error in update {}'.format(serializer.errors))
查看序列化程序的变化,首先检索要更新的对象,即用户,然后是包含要更新的字段和值的字典,partial=True 指定部分更新。
为了保存新对象,直接在序列化程序中传递有效负载,然后是 .save()
serializer = CustomersSerializer(data=payload)
if serializer.is_valid():
serializer.save()
对于 PUT 操作,发送客户的完整更新数据
customer = Customer.objects.get(id=1)
serializer = CustomersSerializer(customer,data=payload)
if serializer.is_valid():
serializer.save()
我是 Django 休息框架的新手,想要更新数据库中的现有数据。 但是代替更新的是将新数据添加到数据库中。
serializers.py
class CustomersSerializer(serializers.Serializer):
lname = serializers.CharField(max_length=10)
fname = serializers.CharField(max_length=10)
def create(self, validated_data):
return Customers.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.fname = validated_data.get('fname', instance.fname)
instance.lname = validated_data.get('lname', instance.lname)
instance.save()
return instance
view.py
def UpdateData(request): # Not Working
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user)
json_data = JSONRenderer().render(serialize.data)
stream = io.BytesIO(json_data)
data = JSONParser().parse(stream)
serializer = CustomersSerializer(data=data)
if serializer.is_valid():
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
serializer.save()
return HttpResponse("Updated..")
如果我的整个过程是错误的,请给我一些好的资源来理解序列化程序和 django rest 框架。
我学到的是 调用 .save() 将创建一个新实例,或更新现有实例,具体取决于在实例化序列化程序时是否传递了现有实例 class .
def UpdateData(request): # Not Working
##payload send in request(fields with value which are changed) in request.data
request_data = request.data
payload = {
'fname' : 'test',
'lname' : 'user'
}
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user,payload,partial=True)
##specify renderers/decoders settings in settings.py/config.py
if serializer.is_valid():
##don't know why you need this.
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
###
serializer.save()
return HttpResponse("Updated..")
return HttpResponse('error in update {}'.format(serializer.errors))
查看序列化程序的变化,首先检索要更新的对象,即用户,然后是包含要更新的字段和值的字典,partial=True 指定部分更新。
为了保存新对象,直接在序列化程序中传递有效负载,然后是 .save()
serializer = CustomersSerializer(data=payload)
if serializer.is_valid():
serializer.save()
对于 PUT 操作,发送客户的完整更新数据
customer = Customer.objects.get(id=1)
serializer = CustomersSerializer(customer,data=payload)
if serializer.is_valid():
serializer.save()