我想知道如何将抽象模型导入另一个应用程序
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:无法导入名称位置
如何导入抽象模型?
答案 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