我在models.py中定义了如下代码:
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
def __str__(self):
return "%s-%d" %(self.gname,self.gboynum)
class Students(models.Model):
sname = models.CharField(max_length=20)
sgender = models.BooleanField(default=True)
sage =models.IntegerField()
scontend=models.CharField(max_length=20)
isDelete=models.BooleanField(default=False)
sgrade =models.ForeignKey("Grades",on_delete=models.CASCADE)
通过代码:
1.python manage.py makemigrations
2.python manage.py migrate
在mysql数据库中生成了两个类表以及对应的django自动生成的表。
但是突然发现有个变量类型定义错了,手动在cmd中删除了这两个表,本以为再次执行上两段代码能够再次将两个类映射到数据库中,但是现实并非如此。
首先执行1,反馈
No changes detected
然后执行2,反馈
django.db.utils.ProgrammingError: (1146, "Table 'helloworld.myapp_grades' doesn't exist")
之前被我删除的表找不到了,而且没有自动映射过去。
解决办法:
首先我删除了数据库中的django.migrations表,然后再删除migrations文件夹下的0001_initial文件,再次执行代码1,2,编译通过完美。
然而,数据库中并没有成功映射出数据库。这次,我没有删除django.migrations,而是将表中的关于这个项目的记录给删除掉,然后继续执行1,2。完美,在数据库中出现我的两个类表。
删除前migrations表中数据:
删除后migration数据:
原理是因为在migraions数据库中已经记录到这个项目已经migration过了,那么只要删除这条数据,系统认为该项目还没有migrate过而再次映射数据库。