python - what - Cómo tener dos modelos de referencia entre sí Django
tutorial de django (2)
La documentación de Django para el campo ForeignKey indica:
Si necesita crear una relación en un modelo que aún no se ha definido, puede usar el nombre del modelo, en lugar del propio objeto del modelo.
Así que en tu caso, eso sería:
class Game(models.Model):
# Other fields...
on = models.ForeignKey(''Member'', blank = True)
class Member(models.Model):
# Other fields...
game = models.ForeignKey(Game)
Tengo el siguiente código:
class Game(models.Model):
title = models.CharField(max_length=50)
summery = models.CharField(max_length=500)
key = models.IntegerField()
pin = models.CharField(max_length=12)
complete = models.BooleanField()
invite_sent = models.DateTimeField()
on = models.ForeignKey(Member, blank = True) #<----
class Member(models.Model):
email = models.CharField(max_length=100)
color = models.CharField(max_length=11)
game = models.ForeignKey(Game) #<----
La clave externa "on" enlaza con uno de los miembros (a quién le toca). Todos los miembros de un juego tienen configurada su clave externa de "juego" para el juego en el que se encuentran. El problema es que Django no me deja hacer referencia a una clase antes de que haya sido declarada, y como no puedo declararlos simultáneamente ...
Editar: Para aclarar las cosas, he aquí un ejemplo. Si hubiera cinco miembros jugando un juego, los cinco tendrían claves externas para el juego. Por otro lado, el juego tendría una clave externa para el miembro en particular que fue el turno.
No es necesario que los dos modelos se hagan referencia entre sí con claves externas. Quite la línea:
on = models.ForeignKey(Member, blank = True) #<----
y lógicamente, los Member
seguirán estando asociados a Game
diferentes (y esto tiene más sentido porque un miembro puede pertenecer a un juego a la vez, mientras que un juego puede tener más de un miembro).
Puedes usar la relación inversa para descubrir qué miembros están en un juego en particular.