python manage.py makemigrations 数据迁移时提示django.db.utils.ProgrammingError: (1146, u"Table 'test_platform.env_envinfo' doesn't exist")

模型文件如下

models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from account.models import User


# Create your models here.


class Projects(models.Model):
    """
    项目基础信息
    """
    project_name = models.CharField(verbose_name='项目名', max_length=20)
    desc = models.CharField(verbose_name='项目描述', max_length=200)
    project_manager = models.CharField(verbose_name='项目经理', max_length=20)
    project_line = models.CharField(verbose_name='产品线', max_length=20)
    status = models.SmallIntegerField(verbose_name='是否迭代中(1:是,2:否)')
    create_time = models.DateTimeField(auto_now_add=True, null=True)
    update_time = models.DateTimeField(auto_now=True, null=True)

    def __str__(self):
        return self.project_name


class ServerInfo(models.Model):
    """
    服务器信息
    """
    server_ip = models.CharField(verbose_name='服务器IP', max_length=20)
    app_port = models.CharField(verbose_name='应用端口', max_length=20)
    app = models.CharField(verbose_name='部署应用', max_length=20)
    cpu = models.CharField(verbose_name='CPU核心数', max_length=20)
    memory = models.CharField(verbose_name='内存大小', max_length=20)
    disk = models.CharField(verbose_name='磁盘大小', max_length=20)
    status = models.SmallIntegerField(verbose_name='是否空闲(1:在用,2:空闲)')
    create_time = models.DateTimeField(auto_now_add=True, null=True)
    update_time = models.DateTimeField(auto_now=True, null=True)

    def __str__(self):
        return self.server_ip


class EnvInfo(models.Model):
    """
    环境信息表
    """
    project_name = models.ForeignKey(Projects, verbose_name='项目名', related_name='name')
    project_line = models.ForeignKey(Projects, verbose_name='产品线', related_name='line')
    manager = models.ForeignKey(User, related_name='env_manager_name', verbose_name='环境管理者', null=True)
    jenkins = models.CharField(verbose_name='jenkins地址', max_length=255)
    type = models.SmallIntegerField(verbose_name='环境类型(1:sit,2:uat)')
    create_time = models.DateTimeField(auto_now_add=True, null=True)
    update_time = models.DateTimeField(auto_now=True, null=True)

    def __str__(self):
        # return self.project_name, self.manager
        return self.manager

执行数据迁移时总是提示:django.db.utils.ProgrammingError: (1146, u"Table 'test_platform.env_envinfo' doesn't exist")

疑问:第一次迁移怎么就提示我表不存在呢,我这是才准备新建表啊。

一般网上查询都是说删除掉migrations下的迁移文件,和数据库中的记录,但是我是第一次迁移所以不适用。

我试着将EnvInfo表注释掉,只迁移Projects和ServerInfo表,显示成功了,于是将目光聚焦在EnvInfo表的外键上,只有这张表中有外键关系,最终发现manager字段和project_name字段的related_name='name'是一样的,

然后修改了manager的命名,再次迁移,解决!

感想:makemigrations时的提示也太不准确了吧,所以解决思路一直走错了,以后命名东西是还是要尽量准确描述,避免雷同

原文地址:https://www.cnblogs.com/gcgc/p/13801549.html