Как объединить данные POST с существующими данными экземпляра в Django REST Framework? - PullRequest
0 голосов
/ 28 января 2019

Обычный шаблон в методах 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 с существующими данными экземпляра, когда это применимо?

1 Ответ

0 голосов
/ 28 января 2019

Если вы имели в виду обновление экземпляра новыми данными запроса, то нет.Это не (и, вероятно, не следует) делать до проверки, иначе могут быть ошибки, поскольку достоверность данных еще не подтверждена.Обновление должно прийти только после проверки.В тех немногих случаях, когда вам нужно сравнить 2 поля в данных запроса или использовать существующие данные экземпляра, подход, который вы выбрали, хорош.Если у вас много таких случаев, то использование такого метода, как это делает ваш коллега, будет хорошей идеей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...