Django вызывает save для объекта QuerySet - объект 'QuerySet' не имеет атрибута 'save' - PullRequest
13 голосов
/ 03 июня 2011

Как заставить работать нижеприведенное?

player = Player.objects.get(pk=player_id)
game = Game.objects.get(pk=game_id)
game_participant = GameParticipant.objects.filter(player=player, game=game)
game_participant.save()

I, когда объект уже существует в базе данных, тогда я получаю:

У объекта 'QuerySet' нет атрибута'спасти'.

С точки зрения моих моделей, GameParticipant имеет ForeignKey для Game и Player.Я понимаю, что фильтр возвращает QuerySet, но я не уверен, как привести его к GameParticipant, или это неправильное мышление?СДЕЛАТЬ?то есть.с .get () вместо .filter (), но потом я сталкиваюсь с другими проблемами ???

Ответы [ 3 ]

15 голосов
/ 03 июня 2011

Вы захотите использовать метод update, поскольку имеете дело с несколькими объектами:

https://docs.djangoproject.com/en/2.0/topics/db/queries/#updating-multiple-objects-at-once

14 голосов
/ 03 июня 2011

фильтр возвращает набор запросов. Набор запросов - это не один объект, это группа объектов, поэтому нет смысла вызывать save () для набора запросов. Вместо этого вы сохраняете каждый отдельный объект IN в наборе запросов:

game_participants = GameParticipant.objects.filter(player=player, game=game)
for object in game_participants:
    object.save()
2 голосов
/ 07 февраля 2012

Эту ошибку можно получить, назначив несохраненный объект другому внешнему полю объекта.

    for project in projects:
        project.day = day
    day.save()

и правильный путь этого:

    day.save()
    for project in projects:
        project.day = day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...