django抽象模型继承导入

时间:2013-12-05 17:11:35

标签: 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:无法导入名称位置

如何导入抽象模型?

3 个答案:

答案 0 :(得分:2)

稍微简化类的名称,以下内容适用于我 在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}强加的。这样做会让你放松心情 你会喜欢把事情整齐地组织起来。

有助于调试模块导入的另一件事就是print 导入的模块。然后你就可以知道实际解决了什么。 例如:

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'>

答案 1 :(得分:0)

在这样的正常结构中:

my_project
  - /my_project
    - /settings.py
  - /app1
    - /models.py
      * class Model1...
  - /app2
    - /models.py
      * class Model2...

从app1 / models.py这对我有用:

from django.db import models
from my_project.app1.models import Model1

class Model2(Model1):
    ...

使用Django 11.1

答案 2 :(得分:-1)

尝试

from world_elements import Location