you tag register forget did django django-models

django - did you forget to register or load this tag



Django-Problema de importaciĆ³n de modelo circular (4)

Algo que no he mencionado en ningún lugar con suficiente detalle es cómo formular correctamente la cadena dentro de ForeignKey al hacer referencia a un modelo en una aplicación diferente. Esta cadena necesita ser app_label.model_name . Y, muy importante, la app_label no es toda la línea en INSTALLED_APPS, sino solo el último componente de la misma. Entonces, si INSTALLED_APPS se ve así:

INSTALLED_APPS = ( ... ''path.to.app1'', ''another.path.to.app2'' )

luego, para incluir una clave externa a un modelo en la aplicación 2 en un modelo de aplicación1, debe hacer lo siguiente:

app2_themodel = ForeignKey(''app2.TheModel'')

Pasé bastante tiempo tratando de resolver un problema de importación circular (por lo que no pude simplemente from another.path.to.app2.models import TheModel ) antes de tropezar con esto, google / SO no fue de ayuda (todos los ejemplos tenían rutas de aplicaciones de componente único), así que con suerte esto ayudará a otros novatos django.

Realmente no entiendo esto, así que si alguien pudiera explicar cómo funciona esto, lo agradecería muchísimo. Tengo dos aplicaciones, Cuentas y Tema ... aquí está mi lista de configuraciones:

INSTALLED_APPS = ( ''django.contrib.auth'', ''django.contrib.contenttypes'', ''django.contrib.sessions'', ''django.contrib.messages'', ''accounts'', ''themes'', )

En las cuentas, estoy tratando de hacer esto:

from themes.models import Theme class Account(models.Model): ACTIVE_STATUS = 1 DEACTIVE_STATUS = 2 ARCHIVE_STATUS = 3 STATUS_CHOICES = ( (ACTIVE_STATUS, (''Active'')), (DEACTIVE_STATUS, (''Deactive'')), (ARCHIVE_STATUS, (''Archived'')), ) id = models.AutoField(primary_key=True) name = models.CharField(max_length=250) slug = models.SlugField(unique=True, verbose_name=''URL Slug'') status = models.IntegerField(choices=STATUS_CHOICES, default=ACTIVE_STATUS, max_length=1) owner = models.ForeignKey(User) enable_comments = models.BooleanField(default=True) theme = models.ForeignKey(Theme) date_created = models.DateTimeField(default=datetime.now)

Y en mi modelo de tema:

class Theme(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=250) slug = models.SlugField(unique=True, verbose_name=''URL Slug'') date_created = models.DateTimeField(default=datetime.now) class Stylesheet(models.Model): id = models.AutoField(primary_key=True) account = models.ForeignKey(Account) date_created = models.DateTimeField(default=datetime.now) content = models.TextField()

Django está echando el siguiente error:

from themes.models import Theme ImportError: cannot import name Theme

¿Es esto algún tipo de problema de importación circular? Intenté usar una referencia perezosa, ¡pero eso tampoco parece funcionar!



Elimine la importación de Theme y use el nombre del modelo como una cadena en su lugar.

theme = models.ForeignKey(''themes.Theme'')


Use la función get_model de django.db.models que está diseñada para las importaciones de modelo perezoso .:

MyModel = get_model(''app_name'', ''ModelName'')

En tu caso:

Theme = get_model(''themes'', ''Theme'')

Ahora puedes usar Theme