zenwalker
2/20/2016 - 2:00 PM

SetterMixin for Rest Framework

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