Могу ли я вызывать функцию как при создании, так и при обновлении в 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):
    # …
Вернуться на верх