我想知道如何将抽象模型导入另一个应用
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:无法导入名称位置
如何导入抽象模型?
稍微简化一下类的名称,以下对我有效在Django 1.7中,这是目前最新的稳定版本写
目录布局
project
_ apps
_ __init__.py
_ A
_ B
_ config
_ __init__.py
_ settings.py
_ urls.py
_ wsgi.py
_ data
_ makefile
_ manage.py
_ README.md
在上文中,应用程序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目录布局惯例由CCD_ 4施加。这样做会解放你的思想你会喜欢把事情组织得井井有条。
另一个有助于调试模块导入的东西是简单的print
ing导入的模块。然后你就可以知道实际解决了什么问题。例如:
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'>
在这样的正常结构中:
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
尝试
from world_elements import Location