Импортировать модель модели приложения в другую модель приложения
У меня есть 2 приложения: сотрудники и службы, каждый из которых имеет свои собственные models.py
В соавторах models.py я могу "из services.models импортировать службы".
Когда я пытаюсь "из-за состояния импорта импортировать статус" в services models.py, я получаю это сообщение об ошибке:
Traceback (последний последний вызов): Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/commands/runserver.py", строка 91, in inner_run self.validate(display_num_errors = True) Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/base.py", строка 266, в подтверждении num_errors = get_validation_errors (s, app) Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/core/management/validation.py", строка 30, в get_validation_errors для (app_name, error) в get_app_errors(). items(): Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7. egg/django/db/models/load.py", строка 158, в get_app_errors self._populate() Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading. py", строка 64, в _populate self.load_app (app_name, True) Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/db/models/loading.py", строка 88, в load_app models = import_module ('. models', app_name) Файл "/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packages/Django-1.4.3-py2.7.egg/django/Utils/importlib.py", строка 35, в import_module import (имя) Файл "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/coworkers/models.py", строка 2, в из services.models import Services File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py", строка 5, в class Models (models.Model): Файл "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py", строка 11, в услугах status = models.ForeignKey(Status) NameError: имя 'Status' не определено
-
coorker models.py
from django.db import models
from services.models import Services
class Status(models.Model):
status_name = models.CharField(max_length=50)
status_description = models.TextField(blank=True, null=True)
class Meta:
verbose_name = "Status"
verbose_name_plural = "Status"
def __unicode__(self):
return self.status_name
services models.py
from django.db import models
from coworkers.models import Status
# This table contains all the information about plans and other general services provided.
class Services(models.Model):
service_name = models.CharField(max_length=100)
service_description = models.TextField(blank=True, null=True)
service_price = models.DecimalField(max_digits=7, decimal_places=2, blank=True, null=True)
creation_date = models.DateField(auto_now_add=True)
last_update = models.DateField(auto_now=True)
status = models.ForeignKey(Status)
class Meta:
verbose_name = "Services"
verbose_name_plural = "Services"
def __unicode__(self):
return self.service_name
-
Может кто-нибудь помочь мне увидеть, что я делаю неправильно?
Спасибо заранее!
Ответы
Ответ 1
В Django 1.6.5 это:
import coworkers
status = models.ForeignKey(coworkers.models.Status)
Должно быть:
import coworkers
status = models.ForeignKey(coworkers.Status)
Я (сейчас) знаю, что OP использует Django 1.4.3 и что некоторые ответы могут решить это в этой версии Django. Однако мне потребовалось некоторое время, чтобы заметить версию, и эти ответы не работают в версии 1.6.5.
Ура!
Ответ 2
Это вызвано циклическим импортом в Python.
Вы можете использовать этот синтаксис:
status = models.ForeignKey('coworkers.models.Status')
Django определит модель, используя этот путь, поэтому вам не нужно импортировать Status.
Другим решением в вашем случае было бы удалить второй оператор import в папках coorker, поскольку Сервисы, похоже, не используются в этом файле.
Ответ 3
Он циклически импортирует, что приводит к ошибкам.
Вы можете попробовать,
import coworkers
status = models.ForeignKey(coworkers.models.Status)
Ответ 4
Сначала создайте модель состояния и выполните syncdb, а затем создайте модель сервисов и syncdb. Он должен работать.
Проблема заключается в том, что python не может найти "Status", сначала пытается создать модель Services.
Ответ 5
У меня есть всевозможные ошибки, подобные этому при выполнении syncdb:
CommandError: One or more models did not validate: parts.vehicle:
'customer' has a relation with model <class
'customers.models.Customer'>, which has either not been installed or
is abstract.
Наконец я понял, что забыл добавить новое приложение в settings.py. Администратор тоже не смог найти. Это должно было быть моим первым ключом. В противном случае я делал то, что было в ответе e.thompsy для django 1.6.5