django serializers 增加update方法
时间: 2023-10-12 22:06:47 浏览: 145
Django serializers 默认提供了 create 方法用于创建新的对象,但是没有提供 update 方法用于更新现有的对象。但是,我们可以通过继承 serializers.Serializer 类并添加自定义 update 方法来实现这一功能。
以下是一个示例:
```python
from rest_framework import serializers
from myapp.models import MyModel
class MyModelSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=100)
def create(self, validated_data):
return MyModel.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.save()
return instance
```
在这个示例中,我们添加了一个自定义 update 方法,该方法接受两个参数:instance 和 validated_data。instance 是要更新的现有对象,而 validated_data 是包含要更新的字段值的字典。我们使用 validated_data 中的字段值更新现有对象,并将其保存到数据库中。
注意,我们还需要将 id 字段设置为 read_only=True,以防止在更新对象时更改其 ID。
使用这个自定义的 MyModelSerializer,我们就可以像这样更新现有的 MyModel 对象:
```python
my_model = MyModel.objects.get(pk=1)
serializer = MyModelSerializer(my_model, data={'name': 'new name'}, partial=True)
if serializer.is_valid():
serializer.save()
```
在这个示例中,我们首先获取要更新的 MyModel 对象,并将其传递给 MyModelSerializer 的构造函数。然后,我们将要更新的字段值作为 data 参数传递给 serializer,并将 partial 参数设置为 True,以允许部分更新。最后,我们检查 serializer 是否有效,并调用 save 方法以更新对象。
阅读全文