模型文件如下
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时的提示也太不准确了吧,所以解决思路一直走错了,以后命名东西是还是要尽量准确描述,避免雷同