zoukankan      html  css  js  c++  java
  • 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时的提示也太不准确了吧,所以解决思路一直走错了,以后命名东西是还是要尽量准确描述,避免雷同

  • 相关阅读:
    linux shell
    jsp应用
    JavaScript基础整理(2)
    Struts2验证框架实例
    一个Struts2的实例
    Java继承和多态实例
    VS2010webConfig配置
    html兼容性
    Linux 入门记录:一、命令行 Bash 的基本操作
    微信支付:curl 出错,错误码: 60
  • 原文地址:https://www.cnblogs.com/gcgc/p/13801549.html
Copyright © 2011-2022 走看看