python - django抽象模型继承导入

标签 python django inheritance model abstract

我想知道如何将抽象模型导入另一个应用程序

world_elements 拥有:

class Location(models.Model):
    """
    Holds x,y coordinates of a virtual 2d map. 
    """

    x = models.IntegerField()
    y = models.IntegerField()

    class Meta:
        abstract = True

    def __unicode__(self):
        return "%s, %s" % (self.x, self.y)

现在我在另一个应用程序中尝试:

from world_elements.models import Location

class NpcTown(Location):
    """
    A town with their coordinates trianinggrounds quest office and all other relevant attributes
    """

    # general town information
    name = models.CharField(max_length = 63)
    flavor = models.TextField(max_length = 511)
    guild = models.ForeignKey(NpcGuild)

    # locations
    trainingground = models.ForeignKey(TrainingGround, null=True)

    def __unicode__(self):
        return self.name

但现在我得到 ImportError: cannot import name Location

如何导入抽象模型?

最佳答案

稍微简化类的名称,以下对我有用 在 Django 1.7 中,这是当时最新的稳定版本 写作。

目录布局

    project
          \_ apps
              \_ __init__.py
              \_ A
              \_ B
          \_ config
              \_ __init__.py
              \_ settings.py
              \_ urls.py
              \_ wsgi.py
          \_ data
          \_ makefile
          \_ manage.py
          \_ README.md

在上面,app A 包含抽象模型。 B 使用它,因为 如下:

抽象类

class AModel(Model):
    ...
    class Meta:
        abstract = True

然后

具体类

from apps.A.models import AModel

class BModel(AModel):
    ...
    blah = "ayyo"

请注意,应用程序 A 和 B 都必须包含一个 __init__.py 文件。

不要害怕打破 Django 目录布局约定 由 manage.py start{app,project} 强加。这样做会解放你的思想 你会喜欢把东西整理得井井有条。

另一个有助于调试模块导入的东西就是 printing 导入的模块。然后您可以知道实际正在解决的问题。 例如:

from apps.A.models import AModel
print AModel # <class 'apps.A.models.AModel'>

和:

import apps
print apps # <module 'apps' from '/home/g33k/gits/checkouts/my/project/apps/__init__.pyc'>

关于python - django抽象模型继承导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406340/

相关文章:

CSS 继承(div 和 div a 样式相同)

python - 没有CSS的Django Admin加载

python - 基于匹配字符的文件分离

django - 如何在 Docker Compose 中将目录从一个容器复制到另一个容器?

python - 我需要一个 django-celery 守护进程来监听特定的rabbitmq channel

c++ - 关于多重继承和虚继承

python - 简单 python 服务器的问题。即使在我(据说)关闭套接字之后,socket.accept() 仍接受 input/favicon.ico

python - 使用 Appcelerator 在 mac 上获取 safari 和 chrome 打开的选项卡

python - 错误 - TypeError 在 django 中得到了一个意外的关键字参数 'name'

c++ - 从类模板继承的类的 vector