10

我有 2 个应用程序:coworkersservices,每个都有自己的 models.py

在同事 models.py 中,我可以“从 services.models 导入服务”。

当我尝试在 services models.py 中“从 coworkers.models 导入状态”时,我收到以下错误消息:

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 行,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 for (app_name, error) in 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/loading.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 模型 = 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_moduleegg/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 模型 = 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_moduleegg/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 模型 = 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/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/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 导入(名称)文件“/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/coworkers/models.py”,第 2 行,从 services.models 导入服务文件“/Users/lucas/Documents /projetos/cwk-manager/cwk-manager/cwk_manager/services/models.py”,第 5 行,在类 Services(models.Model):文件“/Users/lucas/Documents/projetos/cwk-manager/cwk-manager /cwk_manager/services/models.py",第 11 行,在 Services status = models.ForeignKey(Status) NameError: name 'Status' is not defined

--

同事模型.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

服务模型.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

- 有人可以帮我看看我做错了什么吗?

提前致谢!

4

5 回答 5

12

这是由 Python 中的循环导入引起的。您可以使用以下语法:

status = models.ForeignKey('coworkers.models.Status')

Django 将使用此路径确定模型,因此您无需导入 Status。

在您的情况下,另一个解决方案是删除 coworker.models 中的第二个导入语句,因为该文件中似乎没有使用服务。

于 2012-12-14T13:37:03.500 回答
10

在 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 中不起作用。

干杯!

于 2014-07-09T16:18:18.447 回答
1

它是循环导入的,会导致错误。

你可以试试,

import coworkers
status = models.ForeignKey(coworkers.models.Status)
于 2012-12-14T13:22:22.073 回答
0

我在做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 提供的答案

于 2014-09-06T05:10:52.417 回答
0

只需先创建状态模型并执行同步数据库,然后创建服务模型和同步数据库。它应该工作。

问题是 python 无法找到“状态”,因为它第一次尝试创建服务模型。

于 2012-12-15T12:25:56.653 回答