我有一些抽象的模型:
class MyModel(models.Model):
#some filelds...
class Meta:
abstract = True
当我像这样导入此模型时:from project.application.models import MyModel
我已导入此类:<class 'project.application.models.MyModel'>
但是当我这样导入时:from application.models import MyModel
我导入的这个类没有project
前缀:<class 'application.models.MyModel'>
如果模型不是抽象的,则始终使用project
前缀<class 'project.application.models.MyModel'>
因此,当我尝试使用issubclass函数时,会导致奇怪的行为。
问题是为什么用这种方式导入的django抽象模型以及如何避免这种行为?
答案 0 :(得分:0)
我不确定这与Django或抽象类有什么关系,但是你的路径是如何构建的。
采用以下示例:
dir0/
dir1/
__init__.py
dir2/
__init__.py containing class A
现在假设dir0
和dir1
都在您的路径上,您将获得:
>>> from dir2 import B
>>> B
<class 'dir2.B'>
>>> from dir1.dir2 import B
>>> B
<class 'dir1.dir2.B'>
幸运的是,自从django 1.4以来,你不再需要路径技巧了,这种情况不应再出现了。只有包含manage.py的目录以及项目文件夹中的app文件夹应位于您的路径中。
您应始终使用import myapp...
或from myapp...
,不要在导入中使用该项目,这会使您的应用无法重复使用。
您可以查看the django documentation for 1.4,将旧项目布局与新项目布局进行比较。