Realmente no entiendo esto, así que si alguien pudiera explicar cómo funciona esto, lo agradecería mucho. 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 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 temático:
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á lanzando el siguiente error:
from themes.models import Theme
ImportError: cannot import name Theme
¿Es este algún tipo de problema de importación circular? Intenté usar una referencia perezosa, ¡pero eso tampoco parece funcionar!
django
django-models
Hanpan
fuente
fuente
Account
desde el módulo dondeTheme
está definido?Respuestas:
Elimine la importación de
Theme
y use el nombre del modelo como una cadena en su lugar.fuente
'themes.Theme'
, ya que está en una aplicación diferente.Hasta Django 1.7:
Utilice la
get_model
funcióndjango.db.models
que está diseñada para las importaciones de modelos perezososEn tu caso:
Ahora puedes usar
Theme
Para Django 1.7+:
fuente
apps.get_model(app_label, model_name)
oapps.get_model('app_label.model_name')
en Django 1.7+Algo que no he visto mencionado en ninguna parte 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 debe ser
app_label.model_name
. Y, lo que es más importante,app_label
no es la línea completa en INSTALLED_APPS, sino solo el último componente de la misma. Entonces, si su INSTALLED_APPS se ve así:luego, para incluir una ForeignKey a un modelo en app2 en un modelo app1, debe hacer:
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 aplicación de un solo componente), así que espero que esto ayude a otros novatos de django.fuente
Desde Django 1.7, la forma correcta es ir así:
Ver: https://docs.djangoproject.com/ja/1.9/ref/applications/#django.apps.apps.get_model
fuente
apps.get_model('your_app_name.YourModel')
conveniente para usar en unmap
etc.