django makemigrations上的“表不存在”

时间:2017-10-09 07:47:22

标签: mysql django django-models migration

在使用django 1.11的{​​{1}}应用中,我有3个应用,其中一个我有'国家/地区'模式:

mysql

我尝试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") 为另一个与此模型及其数据库表无关的应用程序进行迁移,我仍然会收到此错误。

3 个答案:

答案 0 :(得分:2)

回顾一下,如果您有任何依赖关系,可能同一个模型需要同一个应用程序或其他应用程序中的模型国家/地区:

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

1.-如果为True,则需要检查settings.py中的installed_apps是否具有正确的应用顺序,如果属于同一个应用,则需要首先声明国家/地区应用,然后再声明家属。

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

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

上讨论相同的错误

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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