【问题标题】:Attempted relative import beyond toplevel package in django尝试在 django 中超出顶级包的相对导入
【发布时间】:2018-01-27 09:38:05
【问题描述】:

【问题讨论】:

标签: python django django-models


【解决方案1】:

在你的模型中试试这个:

#Remove the import statement: from blog.models import sighinmodel
#Then, inside your model
user = models.ForeignKey('blog.sighinmodel' , on_delete = None)

另外,我想指出,这不是在你的 models.py 中导入其他模块的正确方法。

你应该这样做:

from appname.models import ModelName
#for importing from another module's models.

在 Django 的 import 语句中不需要相对路径名。 from appname.module import function/class 在几乎所有情况下都可以正常工作,直到发生循环冗余,在这种情况下,您必须采取多种方法中的一种。一种是我上面提到的方式:

方法一:简单的把这个放在ModelClass里面。不要导入任何东西。

user = models.ForeignKey('blog.sighinmodel' , on_delete = None)

方法二(不产生循环导入条件时)

from blog.models import sighinmodel
class SomeModel(models.Model): 
    user = models.ForeignKey(sighinmodel , on_delete = None)

注意:上述方法仅在不发生循环导入时有效。如果出现循环导入的情况,切换回第一种声明方式。

希望这会有所帮助。谢谢。

【讨论】:

    【解决方案2】:

    出现此错误是因为不允许在顶级包之外进行相对导入。你的博客本身就是一个模块,所以如果你从那里导入你的模型,它就可以工作。

    from blog.models import User, sighinmodel
    

    我还建议您使用 CamelCase 作为模型名称,因为它们是命名约定的类。

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2020-11-03
      • 2017-02-22
      • 2020-04-06
      • 2016-05-12
      • 1970-01-01
      • 2020-03-07
      相关资源
      最近更新 更多