Почему я не могу использовать ".update ()" с объектом Django? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытался обновить Django объект с помощью:

object_name.update(name="alfred")

Дело в том, что когда я получаю имя объекта таким образом:

object_name = myobject.objects.get(id=object_id)

метод обновление не будет работать.

Но когда я получу объект таким образом:

object_name = myobject.objects.filter(id=object_id)

, он будет работать

Почему это происходит? Это потому, что последний объект - это набор запросов? Есть ли способ использовать .update с django объектом?

спасибо!

1 Ответ

2 голосов
/ 20 апреля 2020

Как уже отмечалось в комментариях, вы не можете использовать .update() на самом экземпляре модели - если только вы не создали функцию на модели самостоятельно.

.update() используется на querysets ( см. документы ).

Если вы хотите сохранить изменения для экземпляра модели, используйте save(), пример:

obj = MyModel.objects.get(...)
obj.some_field = 'some-other-value'
obj.save()

Также см. документы о том, как сохранить изменения в объектах.

Пример того, как можно реализовать MyModel.update():

class MyModel(...):
    ...  # fields etc.

    def update(self, **kwargs):
        for k, v in kwargs.items():
           setattr(self, k, v)
        self.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...