10

私は2つのアプリを手に入れました:同僚サービス、それぞれが独自のmodels.pyを持っています

同僚のmodels.pyでは、「services.modelsからサービスをインポート」できます。

servicesmodels.pyで「fromcoworkers.modelsimportStatus」を実行しようとすると、次のエラーメッセージが表示されます。

トレースバック(最後の最後の呼び出し):ファイル "/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、validate 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_module_populate self.load_app(app_name、True)ファイル"/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packagesのegg/ django / db / models / loading.py"、64行目/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_populate self.load_app(app_name、True)ファイル"/Users/lucas/Documents/projetos/cwk-manager/lib/python2.7/site-packagesのegg/ django / db / models / loading.py"、64行目/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 import(name)File "/Users/lucas/Documents/projetos/cwk-manager/cwk-manager/cwk_manager/coworkers/models.py"、line 2 in from services.models import Services File "/ 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

-

同僚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

サービス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

-誰かが私が間違っていることを確認するのを手伝ってくれますか?

前もって感謝します!

4

5 に答える 5

12

これは、Pythonでの循環インポートが原因です。次の構文を使用できます。

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

Djangoはこのパスを使用してモデルを決定するため、ステータスをインポートする必要はありません。

あなたの場合の別の解決策は、サービスがこのファイルで使用されていないように見えるため、coworker.modelsの2番目のインポートステートメントを削除することです。

于 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を実行し、その後でサービスモデルとsyncdbを作成します。動作するはずです。

問題は、Pythonがサービスモデルを最初に作成しようとして「ステータス」を見つけることができないことです。

于 2012-12-15T12:25:56.653 に答える
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に追加するのを忘れていたことにようやく気づきました。管理者もそれを見つけることができませんでした。それが私の最初の手がかりだったはずです。それ以外の場合、私はdjango1.6.5のe.thompsyによる回答にあることを実行していました

于 2014-09-06T05:10:52.417 に答える