Подтвердить что ты не робот

Django вызывает сохранение объекта QuerySet - объект QuerySet не имеет атрибута "save"

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

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, когда объект уже существует в datbase, я получаю:

Объект QuerySet не имеет атрибута "save".

В терминах моих моделей GameParticipant имеет ForeignKey как для Game, так и для Player. Я понимаю, что фильтр возвращает QuerySet, но я не уверен, как отнести его к GameParticipant или это не правильное мышление?

class Player(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField()

class Game(models.Model):
    game_date = models.DateTimeField()
    team = models.ForeignKey(Team)
    description = models.CharField(max_length=100, null=True, blank=True)
    score = models.CharField(max_length=10, null=True, blank=True)

class GameParticipant(models.Model):
    STATUS_CHOICES = (('Y','Yes'),('N','No'),('M','Maybe'))
    status = models.CharField(max_length=10, choices=STATUS_CHOICES)
    game = models.ForeignKey(Game)
    player = models.ForeignKey(Player)

ИЛИ ЕСТЬ ЛУЧШИЙ ПУТЬ, ЧТО ДЕЛАТЬ, ЧТО ИМ ПЫТАЕТСЬ СДЕЛАТЬ? то есть. с .get() вместо .filter(), но затем я сталкиваюсь с другими проблемами.

4b9b3361

Ответ 2

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

game_participants = GameParticipant.objects.filter(player=player, game=game)
for object in game_participants:
    object.save()

Ответ 3

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

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

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

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