Django的。导入错误。无法导入模型

时间:2015-03-05 01:49:11

标签: django django-models

这很奇怪。我找不到错误。我无法运行服务器(或任何东西)导致我收到错误:

ImportError: cannot import name Libro

所以这些是模型:

perfiles.models.py -

from django.db import models
from django.contrib.auth.models import User

from libros.models import Libro <- WEIRD ERROR ??¡?

class Perfil(models.Model):
    usuario = models.OneToOneField(User, null=True)
    actualmente_leyendo = models.ForeignKey(Libro, related_name="actualmente_leyendo")
    ...

libros.models.py -

from django.db import models

from perfiles.models import Perfil

    class Libro(models.Model):
        titulo = models.CharField(max_length=255, blank=True)
        autor = models.CharField(max_length=255, blank=True)
        imagen = models.CharField(max_length=255, blank=True)

因此,“libros”和“perfiles”都是我在settings.py上注册的应用程序,当我打开'python manage.py shell'并运行'from libros.models import Libro'时,它正常工作并给出我

(InteractiveConsole)
>>> from libros.models import Libro
>>> Libro
<class 'libros.models.Libro'>

那么,错误在哪里呢?为什么python shell导入模型而其他模型不能?任何想法都会有所帮助。感谢。

1 个答案:

答案 0 :(得分:4)

您遇到循环导入错误。您正尝试在perfiles.model中导入Libro,并且您尝试在libros.model中导入Perfil

您可以使用django.db.models.loading.get_model来解决此问题。

您可以执行类似

的操作
from django.db.models.loading import get_model

Libro = get_model('libros', 'Libro')

class Perfil(models.Model):
    usuario = models.OneToOneField(User, null=True)
    actualmente_leyendo = models.ForeignKey(Libro, related_name="actualmente_leyendo")

或者更好的是,在从其他应用引用模型时,不要导入模型并只传递格式为<app>.<model_name>的字符串

class Perfil(models.Model):
    usuario = models.OneToOneField(User, null=True)
    actualmente_leyendo = models.ForeignKey('libros.Libro', related_name="actualmente_leyendo")