Как выполнить полное обновление записи по методу Django REST serializer update () - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть сериализатор на основе модели, который называется RecipeSerializer ().В нем у меня есть метод создания, который выглядит так:

class RecipeSerializer(serializers.ModelSerializer):
    hops = HopAdditionSerializer(many=True)
    fermentables = FermentableAdditionSerializer(many=True)
    style = StyleSerializer()
    yeast = YeastSerializer()
    class Meta:
        model = Recipe
        exclude = ()
    def create(self, validated_data):
        recipe = Recipe.objects.create(**validated_data)
        recipe.save();
        return recipe

Я пытаюсь сделать что-то похожее с моим методом update ().В документации они показывают прохождение каждого поля по одному и установку значений:

def update(self, instance, validated_data):
    instance.email = validated_data.get('email', instance.email)
    instance.content = validated_data.get('content', instance.content)
    instance.save()

Хотя в моей модели много полей.Я хотел бы передать проверенные данные методу обновления, аналогичному методу создания:

instance.update(**validated_data)

Однако я получаю сообщение об ошибке:

'Recipe' object has no attribute 'update'

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

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

@ ответ ruddra должен решить вашу проблему, но если вы все еще хотите использовать метод обновления, вы можете использовать метод обновления набора запросов следующим образом:

Recipe.objects.filter(pk=instance.pk).update(**validated_data)

Обратите внимание, что это даже не ударит поМетод сохранения модели рецепта, так как в нем используется метод массового обновления

0 голосов
/ 09 декабря 2018

Ну, вы можете попробовать вот так:

def update(self, instance, validated_data):
    for key, value in validate_data.items():
         setattr(instance, key, value)
    instance.save()

К вашему сведению: экземпляр модели (или объект) не имеет метода с именем update.Но есть метод update для набора запросов.

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