【问题标题】:Django syncdb - NameError: name '*********' is not definedDjango syncdb - NameError:名称'*********'未定义
【发布时间】:2012-05-13 12:02:15
【问题描述】:

我是 Django 和 Python 的新手,一直在学习教程,但我遇到了一个让我难过的错误。

我正在尝试构建我的 django 模型/数据库。

当我尝试运行 python manage.py syncdb 时,我在命令行提示符中收到以下错误:

C:\Users\6233114\Django-Projects\GlobalX>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
443, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 196,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 231,
 in execute
    self.validate()
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 266,
 in validate
    num_errors = get_validation_errors(s, app)
  File "C:\Python27\lib\site-packages\django\core\management\validation.py", lin
e 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 158, in
 get_app_errors
    self._populate()
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 64, in
_populate
    self.load_app(app_name, True)
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 88, in
load_app
    models = import_module('.models', app_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Users\6233114\Django-Projects\GlobalX\app_data\models.py", line 15, i
n <module>
    class LanguageCode(models.Model):
  File "C:\Users\6233114\Django-Projects\GlobalX\app_data\models.py", line 27, i
n LanguageCode
    languageDirectionID = models.ForeignKey(languageDirection, default=1, db_col
umn="languageDirectionID")
NameError: name 'languageDirection' is not defined

C:\Users\6233114\Django-Projects\GlobalX>

这是我的 models.py 文件的精简版(第 1 - 29 行):

    from django.db import models
    from django.contrib.auth.models import User

    class LanguageDirection(models.Model):
      languageDirectionID = models.AutoField(primary_key=True, db_column="languageDirectionID")
      languageDirectionDescription = models.CharField(max_length=20, db_column="languageDirectionDescription")
      languageDirDescription = models.CharField(max_length=20, db_column="languageDirDescription")
      textAlign = models.CharField(max_length=20, db_column="textAlign")
      oppositeLanguageDirectionDescription = models.CharField(max_length=20, db_column="oppositeLanguageDirectionDescription")
      oppositeLanguageDirDescription = models.CharField(max_length=20, db_column="oppositeLanguageDirDescription")
      oppositeTextAlign = models.CharField(max_length=20, db_column="oppositeTextAlign")
      class Meta:
        db_table="languageDirection"

    class LanguageCode(models.Model):
      languagecodeID = models.AutoField(primary_key=True, db_column="languageCodeID")
      languageCodeDescription = models.CharField(max_length=10, db_column="languageCodeDescription")
      baseLanguageCode = models.CharField(max_length=10, db_column="baseLanguageCode")
      languageNameEng = models.CharField(max_length=255, db_column="languageNameEng")
      altLanguageNameEng = models.CharField(max_length=255, blank=True, null=True, db_column="altLanguageNameEng")
      languageNameNative = models.CharField(max_length=255, db_column="languageNameNative")
      altLanguageNameNative = models.CharField(max_length=255, blank=True, null=True, db_column="altLanguageNameNative")
      iso639_1 = models.CharField(max_length=10, blank=True, null=True, db_column="iso639_1")
      iso639_2T = models.CharField(max_length=10, db_column="iso639_2T")
      iso639_2B = models.CharField(max_length=10, db_column="iso639_2B")
      iso639_X = models.CharField(max_length=10, db_column="iso639_X")
      languageDirectionID = models.ForeignKey(languageDirection, default=1, db_column="languageDirectionID")
      class Meta:
        db_table="languageCode"

LanguageDirection和LangaugeCode的关系是一对多的,其中LanguageDirection.LanguageDirectionID(一)和LanguageCode.LanguageDirectionID(多)。

关于导致此错误的原因以及如何解决此问题的任何建议?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    这是错误的核心:

    languageDirectionID = models.ForeignKey(languageDirection, default=1, db_col
    umn="languageDirectionID")
    NameError: name 'languageDirection' is not defined
    

    该行应该是:

    languageDirectionID = models.ForeignKey(LanguageDirection, default=1, db_column="languageDirectionID")
    

    因为 ForeignKey 采用一个类,或者是一个用引号括起来的类的名称,例如 "LanguageDirection"

    NameError,对于未来,意味着您正在尝试使用不在范围内或不存在的变量。

    【讨论】:

      【解决方案2】:

      有几次发生在我身上的事情是,在 Django 中定义模型时,外键字段与在同一文档中进一步定义的模型相关。

      这在 Pycharm 2.7 中没有给我任何警告,我认为这有点奇怪。无论如何,要解决这个问题,只需在类名周围加上 ''。

      models.ForeignKey('SomeModel')

      【讨论】:

        【解决方案3】:

        languageDirectionID = models.ForeignKey(languageDirection, default=1, db_column="languageDirectionID") 应该是 languageDirectionID = models.ForeignKey(LanguageDirection, default=1, db_column="languageDirectionID")。该错误是指languageDirection(应该引用类名而不是外键目标的DB表名)大写不正确的问题。

        【讨论】:

        • 谢谢!我应该知道的更好。我这是多么愚蠢的错误。
        猜你喜欢
        • 2022-10-16
        • 2018-07-14
        • 2017-12-25
        • 2021-07-17
        • 2017-08-17
        • 2020-02-24
        • 2021-04-14
        • 2020-08-17
        • 2021-03-09
        相关资源
        最近更新 更多