这很奇怪。我找不到错误。我无法运行服务器(或任何东西)导致我收到错误:
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导入模型而其他模型不能?任何想法都会有所帮助。感谢。
答案 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")