2015-05-14 3 views
5

Это может показаться глупым вопросом, но я действительно чувствую, что Django-Rest-Framework не очень хорошо объясняет, как это работает. Слишком много черной магии, которая смущает инструкции по настройке (на мой взгляд).Я не понимаю, как работают сериализаторы Django-Rest-Framework

Например, в нем говорится, что я могу переопределить создание или обновление в своем сериализаторе. Поэтому, когда я смотрю сообщение, я могу отправить данные в сериализатор, у которого есть объявленный метод обновления.

class MySerializer(serializers.ModelSerializer): 

    class Meta: 
     model = MyModel 

    def update(self, instance, validated_data): 

ли обновление только дозвонились, когда модель уже существует, и мы просто обновить некоторые из его данных? Или он вызывает , создавая, когда он создает новый?

, если бы я, чтобы добавить этот метод к этому классу,

def create(self, validated_data): 
     return MyObject.objects.create(**validated_data) 

это конкретно метод, который должен быть вызван для того, чтобы добавить новый объект? и ваша способность переопределять должна быть помещена в сериализатор, но если не объявлено, это метод по умолчанию с параметрами, которые вызывают?

ответ

17

Слишком много магии черного ящика, которая смущает инструкции по настройке (на мой взгляд).

Если есть что-то в документации, которая, по вашему мнению, может быть улучшена, не стесняйтесь to submit a pull request с обновлением. Если это кажется разумным, оно, вероятно, будет объединено и появится в будущем выпуске.

Или он вызывает создание при создании нового?

вызывается, когда сериализатор не инициализирован экземпляром модели, но в него передаются только данные. Когда вызывается serializer.save(), сериализатор проверяет, был ли экземпляр передан и напрямую вызывает create, поэтому экземпляр модели создается и сохраняется в базе данных.

Обновляется ли обновление только после того, как модель уже существует, и мы просто обновляем некоторые ее данные?

update вызывается, когда сериализатору инициализируются с экземпляром модели (или другим объектом) и serializer.save() называется. Это примерно эквивалентно Model.objects.update() по сравнению с Model.objects.create().

это конкретно метод, который необходимо вызвать для добавления нового объекта?

Сериализаторы предназначены для сохранения (включая создание и обновление объектов) с использованием центрального метода serializer.save(). Это похоже на то, как модель может быть сохранена или создана с использованием метода model.save().

и возможность переопределения должна быть помещена в сериализатор, но если не объявлено, это метод по умолчанию с вызываемыми параметрами?

Рекомендуются переопределить create и update на уровне сериализатора, если вам необходимо изменить логику для того, как должны быть сохранены, например, при работе с вложенными сериализаторами модели и связанные с ним объекты.

+0

Отличный ответ, благодарю вас, надеюсь, что больше людей перевернут его. – PythonIsGreat

Смежные вопросы