Когда мы сравниваем код в форме 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)
Так что мне не рекомендуется вызывать проверку модели в сериализаторе. Может быть, я использую его неправильно, так в чем здесь философия?
Спасибо.
serializer.instance
бизнес-службе для проверки и предварительной обработки. - person BMWCMW   schedule 23.11.2018serializer.save()
мы не можем гарантировать существованиеserializer.instance
. Итак, я обнаружил, что, возможно, DRF является более или менее идеальным кандидатом для более простых вариантов использования, как только мы начинаем иметь сложную бизнес-логику, нам нужно поместить их на разные уровни с бизнес-моделями и моделями ORM и более интуитивно понятным доступом друг к другу. - person BMWCMW   schedule 23.11.2018