【问题标题】:'Table doesn't exist' on django makemigrationsdjango makemigrations 上的“表不存在”
【发布时间】:2018-03-20 08:29:59
【问题描述】:

在使用 mysqldjango 1.11 应用程序上,我有 3 个应用程序,其中一个应用程序有一个“国家”模型:

class Country(models.Model):
    countryId = models.AutoField(primary_key=True, db_column='country_id')
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=3)

    class Meta:
        db_table = 'country'

我尝试makemigrations 时收到此错误:

django.db.utils.ProgrammingError: (1146, "Table 'dbname.country' doesn't exist")

如果我使用 ./manage.py makemigrations another_app 为另一个与此模型及其数据库表无关的应用程序运行迁移,我仍然会收到此错误。

【问题讨论】:

  • 您有模块级代码,当模块在创建表之前加载时,它试图从数据库中获取对象。 Here's a similar question。完整的回溯将显示查找发生的位置。

标签: mysql django django-models migration


【解决方案1】:

我遇到了这个问题,这是因为我正在使用我刚刚删除的数据库在模型中的某处初始化默认值。简而言之,我有类似forms.ChoiceField(choices=get_some_data(),...) 的东西,其中get_some_data() 使用数据库来检索一些默认值。

我希望你已经发布了回溯,因为在我的情况下,通过查看get_some_data() 正在使用 orm 的回溯(使用类似 somemodel.objetcs.filter(...) 的东西)很明显。

【讨论】:

  • 谢谢,这帮助我解决了我的问题。一旦我注释掉我的表单,我就可以进行迁移和迁移
  • 是否可以在不注释行的情况下解决此问题?
  • 恐怕不行。如果您了解 django 的工作原理,您就不会这么问了 :)
【解决方案2】:

不知何故,Django 认为您已经创建了这个表并且现在正在尝试修改它,而实际上您已经从外部删除了该表并重新开始。如果是这种情况,请删除 migrations 文件夹中属于您的应用程序的所有文件,然后以 ./manage.py makemigrations 重新开始。

【讨论】:

  • 我需要删除 Migrations 文件夹中的__init__.py 文件吗?
  • @AlexeiMarinichenko No.
【解决方案3】:

查看,如果您有任何依赖关系,同一个模型可能需要模型国家在同一个应用程序或其他应用程序中,例如:

class OtherModel(models.Model):
    country = models.ForeignKey(Country)

1.- 如果为True,则需要检查settings.py中的installed_apps是否有正确的应用顺序,如果在同一个应用中,则需要先声明一个Country应用,然后声明依赖项。

2.-如果依赖在同一个应用程序中,依赖模型需要在models.py中的Country模型之后声明。

3.- 检查控制台上的错误跟踪是否涉及 models.py 或 forms.py 上的相同错误

4.- 检查执行 makemigrations 和 migrate 时应用程序的顺序是否正确:python manage.py makemirgations app_of_country, other_app_name

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2019-09-10
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2018-09-30
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多