Dado:
class Game(models.Model): rengo_black_team = models.ManyToManyField(Player) class OpenChallenge(CommonChallenge): rengo_black_team = models.ManyToManyField(Player) game = models.ForeignKey(Game, on_delete=models.CASCADE) Este código de método OpenChallenge funciona:
for p in self.rengo_black_team.all(): self.game.rengo_black_team.add(p)Pero este código no:
self.game.rengo_black_team.add([x for x in self.rengo_black_team.all()])Basado en el último ejemplo en los documentos ,
>>> john = Author.objects.create(name="John") >>> paul = Author.objects.create(name="Paul") >>> george = Author.objects.create(name="George") >>> ringo = Author.objects.create(name="Ringo") >>> entry.authors.add(john, paul, george, ringo)parece que mi ejemplo debería funcionar, pero obtengo
"El campo 'id' esperaba un número pero obtuvo [<Jugador: anoek>]"
Deberá desempaquetar la lista, ya que add espera que los objetos se pasen como argumentos posicionales y no como una lista, por lo que:
self.game.rengo_black_team.add(*[x for x in self.rengo_black_team.all()])o solo:
self.game.rengo_black_team.add(*self.rengo_black_team.all())