Как добавить данные в отношения с несколькими внешними ключами в Django?
Я создаю симуляцию, написанную на python, и хотел бы использовать форму django для хранения (промежуточного и конечного) результатов в базе данных. Поэтому меня не интересуют URL-адреса и представления.
Проблема, с которой я сталкиваюсь, - это создание объекта с несколькими ForeinKeys. Этот объект должен представлять отношения между агентом и временным шагом.
Вот код:
Я использую следующие модели
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"
приводит к следующему сообщению об ошибке при выполнении self.step = step в конструкторе StepAgentData (см. Комментарий в коде модели 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
Что я делаю не так? Помощь очень ценится.
EDIT:
В каталоге / App я получаю следующее после «импорта моделей»
`
импорт моделей
Traceback (последний вызов был последним):
Файл "", строка 1, в
Файл "models.py", строка 1, в
из django.db импортировать модели
Файл "/usr/local/lib/python2.7/dist-packages/django/db/init.py", строка 14, в
если нет настроек. БАЗЫ:
Файл "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", строка 276, в getattr
self._setup ()
Файл "/usr/local/lib/python2.7/dist-packages/django/conf/init.py", строка 40, в _setup
повысить ImportError («Невозможно импортировать настройки, поскольку переменная среды% s не определена.»% ENVIRONMENT_VARIABLE)
ImportError: Невозможно импортировать настройки, поскольку переменная окружения DJANGO_SETTINGS_MODULE не определена.
«