SetterMixin for Rest Framework
class SetterMixin:
def create(self, validated_data):
instance = super().create(validated_data)
return self.run_setter(instance, validated_data)
def update(self, instance, validated_data):
updated_instance = super().update(instance, validated_data)
self.run_setter(updated_instance, validated_data)
def run_setter(self, instance, validated_data):
for key, value in validated_data.items():
setter_name = 'set_' + key
setter = getattr(self, setter_name, None)
if setter:
setter(instance, value)
continue
setter = getattr(instance, setter_name, None)
if setter:
setter(value)
continue
return instance