Обычный шаблон в методах validate
- сравнение двух значений полей.Например:
def validate(self, attrs: typing.Dict[str, typing.Any]) -> typing.Dict[str, typing.Any]:
end_datetime = attrs.get('end_datetime', self.instance.end_datetime if self.instance else None)
if not end_datetime:
return attrs
if end_datetime < attrs.get('start_datetime', self.instance.start_datetime if self.instance else None):
raise serializers.ValidationError({'end_datetime': 'This value cannot be before the start datetime'})
return attrs
В настоящее время я использую вспомогательный метод, разработанный коллегой, для замены вышеупомянутых вызовов attrs.get
на self._get_input_or_instance_attribute(attrs, 'field_name')
, что в основном делает то же самое: получить запись attrs
с конкретным именем, если оно существует, или же, если мы обновляем существующий экземпляр, получите его текущее значение. Есть ли лучший способ сделать это, , такой как встроенное свойство или метод для объединения данных POST / PUT / PATCH с существующими данными экземпляра, когда это применимо?