Python Django Rest框架序列化程序方法调用
我是Django Rest框架的新手,我想知道如何在ModelSerializer类中调用创建和更新方法 据我所知,当发送POST或PUT请求时,会自动触发create和update方法。有没有办法调用一个新函数,比如say_hello() 这里有一个例子。当我点击一个PUT请求时,我想调用方法say_hello()Python Django Rest框架序列化程序方法调用,python,django,django-rest-framework,Python,Django,Django Rest Framework,我是Django Rest框架的新手,我想知道如何在ModelSerializer类中调用创建和更新方法 据我所知,当发送POST或PUT请求时,会自动触发create和update方法。有没有办法调用一个新函数,比如say_hello() 这里有一个例子。当我点击一个PUT请求时,我想调用方法say_hello() class UserSerializer(serializers.ModelSerializer): """Serialize
class UserSerializer(serializers.ModelSerializer):
"""Serializer for the users object"""
class Meta:
model = User
fields = "__all__"
def create(self, validated_data):
"""Create a new user with encrypted password and return it"""
return get_user_model().objects.create_user(**validated_data)
def update(self, instance, validated_data):
"""Update an user, setting the password and return it"""
password = validated_data.pop('password', None)
user = super().update(instance, validated_data)
if password:
user.set_password(password)
user.save()
return user
def say_hello(self, validated_data):
print(validated_data)
return "Hello you"
要调用与update方法不同的方法,需要覆盖序列化程序的def save()方法: 您可以查看Django Rest框架的默认实现 但您可能更愿意做的是通过覆盖def perform_update()方法来修改视图集:
您可以从
update()
方法调用say_hello(…)
方法,对吗?当然可以,但是我如何调用其他方法来代替update,create?这在视图中发生。这真的很清楚你在用什么样的观点。在常规视图中,您可以在perform\u create(self,serializer)
和perform\u update(self,serializer)
中更改此行为。非常感谢您的回复
def save(self, **kwargs):
validated_data = [
{**attrs, **kwargs} for attrs in self.validated_data
]
if self.instance is not None:
self.instance = self.say_hello(self.instance, validated_data)
assert self.instance is not None, (
'`update()` did not return an object instance.'
)
else:
self.instance = self.create(validated_data)
assert self.instance is not None, (
'`create()` did not return an object instance.'
)
return self.instance
def perform_update(self, serializer):
serializer.say_hello()