2011-06-02 37 views
10

¿Cómo conseguiré que funcione lo siguiente?Llamar a Django guardar en un objeto QuerySet - El objeto 'QuerySet' no tiene ningún atributo 'guardar'

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() 

que cuando el objeto ya existe en la datbase entonces consigo:

objeto 'QuerySet' no tiene atributo 'salvar'.

En términos de mis modelos, GameParticipant tiene ForeignKey tanto Game y Player. Entiendo que el filtro devuelve un QuerySet pero no estoy seguro de cómo convertirlo a GameParticipant o ¿no es eso lo correcto?

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) 

¿O HAY ALGUNA MEJOR MANERA DE HACER LO QUE ME TRATA DE HACER? es decir. con .get() en lugar de .filter() pero luego me encuentro con otros problemas ???

+0

Podría publicar su código de modelo para GameParticipant por favor? Verifique y asegúrese de extender los modelos. El modelo también es adecuado. Su modelo debería tener algo así como 'clase GameParticipant (models.Model)'. – wilbbe01

+0

¿Por qué quieres guardar algo que acabas de cargar desde el db, sin modificarlo? –

Respuesta

13

filtro devuelve un conjunto de preguntas. Un conjunto de consulta no es un objeto único, es un grupo de objetos, por lo que no tiene sentido llamar a guardar() en un conjunto de consulta. En lugar de guardar cada objeto individual EN queryset:

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

Es posible obtener este error asignando el objeto no guardado a otro campo externo del objeto.

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

y de la manera correcta esto es:

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