试图在django中超越toplevel包的相对导入

时间:2017-08-18 16:21:51

标签: python django django-models

2 个答案:

答案 0 :(得分:0)

在你的模特中试试这个:

#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几乎适用于所有情况,直到发生循环冗余,您必须在许多方法中采用一种方法。一个是我上面提到的方式:

方法1 :简单地将它放在ModelClass中。不要进口任何东西。

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

方法2 (当没有出现循环导入条件时)

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

注意:只有在未进行循环导入的情况下,上述操作才有效。如果发生循环导入条件,请切换回第一种声明方法。

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

答案 1 :(得分:0)

此错误即将发生,因为不允许超出顶级包的相对导入。您的博客本身就是一个模块,因此,如果您从那里导入模型,它将起作用。

from blog.models import User, sighinmodel

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