update queryset inspectdb foreign example python mysql django foreign-keys

python - queryset - Django models.py Circular Foreign Key



insert django (3)

En realidad no tienes una referencia circular; el problema es que, al momento de definir Álbum, aún no has definido Imagen. Puedes arreglar eso usando una cadena en su lugar:

class Album(models.model): thumb = models.ForeignKey(''Image'', null=True, blank=True)

Sin embargo, en este caso, es posible que desee utilizar OneToOneField lugar de una clave externa. (Tenga en cuenta que todavía tendrá que usar el truco con la cadena).

Tengo una aplicación django que básicamente es solo un álbum de fotos. Ahora mismo tengo dos modelos: Image y Album . Entre otras cosas, cada Album tiene una clave externa a una Image para que sea su miniatura y cada Image tiene una clave externa al Album que pertenece. Sin embargo, cuando intento usar manage.py syncdb o manage.py sqlall , obtengo errores. diciendo que la clase no definida primero en models.py no está definida cuando se usa en la primera clase definida.

models.py (resumido):

from django.db import models import os class Album(models.Model): thumb = models.ForeignKey(Image, null=True, blank=True) class Image(models.Model): image = models.ImageField(upload_to=''t_pics/images'') thumb = models.ImageField(upload_to=''t_pics/images/thumbs'') album = models.ForeignKey(Album)

Error que recibo cuando manage.py sqlall appname :

[...] File "/path/to/file/appname/models.py", line 4, in ? class Album(models.Model): File "/path/to/file/appname/models.py", line 5, in Album thumb = models.ForeignKey(Image, null=True, blank=True) NameError: name ''Image'' is not defined

Recibo el mismo error cuando cambio el orden de las clases en models.py, excepto que dice ''Album'' undefined lugar de ''Image'' undefined . También intenté comentar la dependencia en la primera clase y luego eliminar el comentario después de que todo lo demás se importó correctamente, pero no ayudo ¿Cómo debo hacer para que esto funcione? Me resisto a hacer un Thumb completo de tercera clase porque tendrá una gran cantidad del mismo código que Image También estoy bastante seguro de que podría agregar manualmente la clave externa a la base de datos, pero quiero que esté limpio y no sea pirateado.


Esto es antiguo, pero de todos modos, me gustaría decir que no veo una razón para el álbum de atributos en el modelo de imagen. En mi opinión, no es realmente necesario.


Use comillas para forzar una referencia perezosa:

models.ForeignKey(''Image'', null=True, blank=True)

Además, ForeignKey.related_name es tu amigo (evita los conflictos de nombres de referencia).