Django calling save on a QuerySet object - 'QuerySet' object has no attribute 'save'
How would I get the below to work?
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 when the object already exists in the datbase then I get:
'QuerySet' object has no attribute 'save'.
In terms of my Models, GameParticipant
has ForeignKey
to both Game
and Player
. I understand that filter returns a QuerySet but I'm not sure how to cast that to a GameParticipant
or is that not the right thinking?
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)
OR IS THERE A BETTER WAY TO DO WHAT IM TRYING TO DO? ie. with a .get() instead of a .filter() but then i run into other issues???
You'll want to use the update
method since you're dealing with multiple objects:
https://docs.djangoproject.com/en/2.0/topics/db/queries/#updating-multiple-objects-at-once
filter returns a queryset. A queryset isn't a single object, it's a group of objects so it doesn't make sense to call save() on a queryset. Instead you save each individual object IN the queryset:
game_participants = GameParticipant.objects.filter(player=player, game=game)
for object in game_participants:
object.save()
It is possible to get this error by assigning not saved object to another object foreign field.
for project in projects:
project.day = day
day.save()
and the right way of this is:
day.save()
for project in projects:
project.day = day
filter return a list and if your want a specific single object from it you need give the index of that object
game_participant = GameParticipant.objects.filter(player=player, game=game)[0]
If you use filter() function then you must loop the data, then use save() function
std = Student.objects.filter(player=player, game=game)
for i in std:
i.name = "somthing"
i.save()
If you use the get() function then use the save() function without a loop.
std = Student.objects.get(player=player, game=game)
std.name = "somthing"
std.save()
def Clearlist(request):
que = Feeds.objects.filter(selected=True)
for i in que:
i.selected = False
i.save()
return redirect('core:all')
this is a good way to save a into queryset
New in Django 2.2: bulk_update
objs = [
Entry.objects.create(headline='Entry 1'),
Entry.objects.create(headline='Entry 2'),
]
objs[0].headline = 'This is entry 1'
objs[1].headline = 'This is entry 2'
Entry.objects.bulk_update(objs, ['headline'])
when you use the queryset maybe it return a list that why u should use
game_participant = GameParticipant.objects.filter(player=player, game=game)[0]
instead of
game_participant = GameParticipant.objects.filter(player=player, game=game)
try this it work for me
精彩评论