姜戈。导入错误。无法导入模型

Django. ImportError. Cannot import Model

这很奇怪。我找不到错误。我无法 运行 服务器(或任何东西)因为我得到一个错误:

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 可以导入模型而另一个模型不能?任何想法都会有所帮助。谢谢

您遇到循环导入错误。您正在尝试在 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")