Могу ли я вызывать функцию как при создании, так и при обновлении в ModelSerializer
Могу ли я вызывать одну и ту же функцию в create и update, не переопределяя ее?
Здравствуйте, я довольно новичок в этом деле и пытаюсь реализовать свой код, используя DRY принцип. Итак, я вызываю функцию, скажем, create_update_password в ModelSerializer's при создании или изменении пароля. я должен переопределить create и update в ModelSerializer и create_update_password в обоих. Я не делаю никакой дополнительной функциональности ни в одной из них, кроме вызова этой функции. Есть ли способ вызвать эту функцию в create и update, не перегружая ее. Буду очень признателен, если кто-нибудь сможет подсказать. Ниже приведен пример кода Спасибо
def create_update_password(self, instance, validated_data):
password = validated_data["password"]
instance.set_password(password)
instance.save()
class UserModelSerializer(ModelSerializer):
def create(self, validated_data):
instance = super(UserModelSerializer, self).create(validated_data)
self.create_update_password(instance, validated_data)
return instance
def update(self, instance, validated_data):
instance = super(UserModelSerializer, self).update(instance, validated_data)
self.create_update_password(instance, validated_data)
return instance
Вы можете работать с декоратором, чтобы применить одну и ту же логику к обоим методам, так:
def create_update_password(f):
@wraps(f)
def g(self, *args, **kwargs):
validated_data = kwargs.get('validated_data') or args[-1]
result = f(self, *args, **kwargs)
result.set_password(validated_data['password'])
return result
и затем используйте это с @method_decorator
:
from django.utils.decorators import method_decorator
@method_decorator(create_update_password, 'create')
@method_decorator(create_update_password, 'update')
class UserModelSerializer(ModelSerializer):
# …