Django调用保存在QuerySet对象上 - 'QuerySet'对象没有属性'save'

Kam*_*i81 13 python django

如何让以下工作?

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()
Run Code Online (Sandbox Code Playgroud)

当对象已存在于数据库中时,我得到:

'QuerySet'对象没有属性'save'.

在我的模型来看,GameParticipantForeignKeyGamePlayer.我理解过滤器会返回一个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)
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法做什么我想做什么?即.使用.get()而不是.filter()然后我遇到其他问题???

Tim*_*ony 15

filter返回一个查询集.查询集不是单个对象,它是一组对象,因此在查询集上调用save()没有意义.而是将每个单独的对象保存查询集中:

game_participants = GameParticipant.objects.filter(player=player, game=game)
for object in game_participants:
    object.save()
Run Code Online (Sandbox Code Playgroud)


bri*_*anz 15

您将要使用该update方法,因为您正在处理多个对象:

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