django抽象模型继承导入
Posted
技术标签:
【中文标题】django抽象模型继承导入【英文标题】:django abstract model inheritance import 【发布时间】:2013-12-22 18:25:42 【问题描述】:我想知道如何将抽象模型导入另一个应用程序
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
如何导入抽象模型?
【问题讨论】:
如果模型在world_elements
,为什么要从world_elements.models
导入?
请发布您的项目文件结构
对不起,如果不清楚,我的另一个模型在角色应用程序中,或者在 wons 应用程序中
【参考方案1】:
稍微简化一下类的名称,以下对我有用 在 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 startapp,project
强加。这样做会解放你的思想
你会喜欢把事情整理得井井有条。
另一个有助于调试模块导入的东西就是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'>
【讨论】:
老兄,你成就了我的一天。我已经为这个进口问题苦苦挣扎了很长一段时间。是的,我应该重新制作我的文件夹结构。这个问题很老了,我实际上已经忘记了。到目前为止,我找到了一种解决方法(我讨厌)来解决这个问题。伙计,你这个男人 小更新也许适合你。还将 init.py 文件也添加到设置映射中 没问题 :) 是的,我在设置目录中添加了__init__.py
- 它在我的设置中,我只是忘了包含它。
刚刚遇到另一个导入错误:( from apps.heroes.models import Hero。现在我确定该类存在但是当我尝试同步db时,我得到文件“/home/ikke/panda/Buah/ apps/heroes/models.py",第 4 行,在 在这样的正常结构中:
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
【讨论】:
【参考方案3】:试试
from world_elements import Location
【讨论】:
然后我得到下一个错误:ImportError: cannot import name Location以上是关于django抽象模型继承导入的主要内容,如果未能解决你的问题,请参考以下文章
不能使用继承的 Django 模型的 Meta 类来配置在继承的抽象模型中定义的字段
Python / Django中多个抽象模型继承中的字段菱形模式