Почему сериализатор django rest framework не будет систематически проверять модель перед сохранением

Когда мы сравниваем код в форме django и сериализаторе django rest framework, последний проверяет только свежие данные из запроса, а затем сразу же запускает Model.save() вместо full_clean(), используемого формой django.

Иногда нам нужно проверить данные в фактическом экземпляре модели перед сохранением, но в этом случае следует использовать переопределение run_validation/create/update сериализатора, чтобы вызвать проверку экземпляра модели с помощью self.instance.clean/full_clean/..., например

class MySerializer(serializers.ModelSerializer):
    field = serializers.ReadOnlyField(source='xxx')

    class Meta:
        model = MyModel
        fields = (...)
        read_only_fields = (...)

    def run_validation(self, data=empty):
        self.instance.clean()
        return super(MySerializer, self).run_validation(data=data)

Так что мне не рекомендуется вызывать проверку модели в сериализаторе. Может быть, я использую его неправильно, так в чем здесь философия?

Спасибо.


person BMWCMW    schedule 21.11.2018    source источник
comment
см. stackoverflow.com/questions/32834026/   -  person Linovia    schedule 21.11.2018
comment
Да, наконец, это скорее обсуждение бизнес-уровня. После обсуждения, если мы хотим сохранить сериализатор DRF, нам нужно сначала передать serializer.instance бизнес-службе для проверки и предварительной обработки.   -  person BMWCMW    schedule 23.11.2018
comment
Но управлять как-то сложно, потому что до запуска serializer.save() мы не можем гарантировать существование serializer.instance. Итак, я обнаружил, что, возможно, DRF является более или менее идеальным кандидатом для более простых вариантов использования, как только мы начинаем иметь сложную бизнес-логику, нам нужно поместить их на разные уровни с бизнес-моделями и моделями ORM и более интуитивно понятным доступом друг к другу.   -  person BMWCMW    schedule 23.11.2018