Python 如何在Django中向具有多个外键的关系添加数据?

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

如何在Django中向具有多个外键的关系添加数据

我正在构建一个用python编写的模拟,并希望使用django的orm将中间和最终结果存储在数据库中。因此,我不关心URL和视图

我遇到的问题是一个具有多个foreinkey的对象的实例化。这个对象应该表示代理和时间步长之间的关系

代码如下:

我使用以下模型

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。