首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django抽象模型导入

Django抽象模型导入
EN

Stack Overflow用户
提问于 2012-08-07 16:30:51
回答 1查看 411关注 0票数 0

我有一些抽象的模型:

代码语言:javascript
复制
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以这种方式抽象模型,以及如何避免这种行为?

EN

回答 1

Stack Overflow用户

发布于 2012-08-17 22:01:38

解释

我不确定这是否与Django或抽象类有关,但与您的路径是如何构建的有关。

下面是一个例子:

代码语言:javascript
复制
dir0/
    dir1/
        __init__.py 
        dir2/
            __init__.py containing class A

现在假设dir0dir1都在您的路径上,您将得到:

代码语言:javascript
复制
>>> from dir2 import B
>>> B
<class 'dir2.B'>
>>> from dir1.dir2 import B
>>> B
<class 'dir1.dir2.B'>

解决方案

幸运的是,从django 1.4开始,您不再需要路径技巧,这种情况应该不会再出现。只有包含你的manage.py的目录,以及你的项目文件夹和应用文件夹应该在你的路径上。

你应该始终使用import myapp...from myapp...,不要在你的导入中使用项目,这会使你的应用程序不可重用。

您可以查看the django documentation for 1.4,它将旧项目布局与新项目布局进行了比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11842011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档