Python 如何在Django中向具有多个外键的关系添加数据?
如何在Django中向具有多个外键的关系添加数据 我正在构建一个用python编写的模拟,并希望使用django的orm将中间和最终结果存储在数据库中。因此,我不关心URL和视图 我遇到的问题是一个具有多个foreinkey的对象的实例化。这个对象应该表示代理和时间步长之间的关系 代码如下: 我使用以下模型Python 如何在Django中向具有多个外键的关系添加数据?,python,database,django,Python,Database,Django,如何在Django中向具有多个外键的关系添加数据 我正在构建一个用python编写的模拟,并希望使用django的orm将中间和最终结果存储在数据库中。因此,我不关心URL和视图 我遇到的问题是一个具有多个foreinkey的对象的实例化。这个对象应该表示代理和时间步长之间的关系 代码如下: 我使用以下模型 from django.db import models import random from django.contrib.admin.util import related_name
from django.db import models
import random
from django.contrib.admin.util import related_name
# Create your models here.
class Agent(models.Model):
agent = int
def __init__(self, agent, *args, **kwargs):
models.Model.__init__(self, *args, **kwargs)
self.agent = agent
def __str__(self):
return str(self.agent)
class Step(models.Model):
step = int
def __init__(self, step, *args, **kwargs):
models.Model.__init__(self, *args, **kwargs)
self.step = step
def __str__(self):
return str(self.step)
class StepAgentData(models.Model):
def __init__(self, step, agent, *args, **kwargs):
models.Model.__init__(self, *args, **kwargs)
self.step = step #This does not work
self.agent = agent
step = models.ForeignKey(Step, related_name='time_step')
agent = models.ForeignKey(Agent, related_name='associated_agent')
data = float
def __unicode__(self):
return str("Step %s \t Agent %s ", (self.step,self.agent))
运行以下脚本
from DBStructureTest.App.models import Step, Agent, StepAgentData
if __name__ == '__main__':
s = Step(1)
s.save()
a = Agent(2)
a.save()
sad = StepAgentData(s,a)
sad.save()
print "finished"
在StepAgentData的构造函数中执行self.step=step时,会导致以下错误消息请参见StepAgentData模型代码中的注释
> File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py",
> line 367, in __set__
> val = getattr(value, self.field.rel.get_related_field().attname)
> File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py",
> line 773, in get_related_field
> data = self.to._meta.get_field_by_name(self.field_name) File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/options.py",
> line 307, in get_field_by_name
> cache = self.init_name_map() File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/options.py",
> line 337, in init_name_map
> for f, model in self.get_all_related_m2m_objects_with_model():
> File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/options.py",
> line 414, in get_all_related_m2m_objects_with_model
> cache = self._fill_related_many_to_many_cache() File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/options.py",
> line 428, in _fill_related_many_to_many_cache
> for klass in get_models(): File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py",
> line 167, in get_models
> self._populate() File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py",
> line 61, in _populate
> self.load_app(app_name, True) File
> "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py",
> line 76, in load_app
> app_module = import_module(app_name) File
> "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py",
> line 35, in import_module
> __import__(name) ImportError: No module named App
文件夹结构如下所示:
|-DBStructureTest
|-App
|-__init__.py
|-Main.py
|-models.py
|-test.py
|-views.py
|-__init__.py
|-manage.py
|-settings.py
|-urls.py
我做错了什么?非常感谢您的帮助
编辑:
在/App目录中,我在执行“导入模型”后得到以下内容
`
导入模型
回溯最近一次呼叫上次:
文件,第1行,在
文件models.py,第1行,在
从django.db导入模型
文件/usr/local/lib/python2.7/dist-packages/django/db/init.py,第14行,in
如果不是设置。数据库:
文件/usr/local/lib/python2.7/dist-packages/django/utils/functional.py,第276行,在getattr中
自我设置
文件/usr/local/lib/python2.7/dist-packages/django/conf/init.py,第40行,在
无法导入raise IMPORTERRORSETINGS,因为环境变量%s未定义。%环境变量
ImportError:无法导入设置,因为环境变量DJANGO_Settings_MODULE未定义。
"
首先,您可能希望对StepAgent类使用多个关系。你也可以有,这将是更好的设计
对于您的错误,您必须导出DJANGO_SETTINGS_MODULE=SETTINGS,或者可以从当前PYTHONPATH访问settingsmodule,否则DJANGO不知道在何处查找以及如何设置您的设置。这是两个不同的问题。最初的一个原因是,您似乎是从DBStructureTest目录运行脚本,所以它试图在它下面找到DBStructureTest子目录。第二个是不言自明的,您需要设置env var或运行manage.py shell
顺便说一句,我在你的模型中没有看到任何数据库字段。相应的SQL表是否包含任何内容?我猜DBStructureTest中也必须包含uu init uu.py。谢谢akonsu,但DBStructureTest中已经有一个init.py。进一步的想法?您能从python提示符加载模块吗?谢谢阿康苏,我编辑了我的问题以反映你的评论。我们仍然感谢你的帮助!这是两个不同的问题。最初的一个原因是,您似乎是从DBStructureTest目录运行脚本,所以它试图在它下面找到DBStructureTest子目录。第二个是不言自明的,您需要设置env var或运行manage.py shellGood提示,其中包含缺少的字段!向代理和步骤类添加models.IntegerField使我摆脱了IntegrityError。