Импортировать модель модели приложения в другую модель приложения

У меня есть 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