在做migrations的时候,偶尔会出现出错。
比如
# models.py 文件里
class User(models.Model):
"""
用户表
"""
name = models.CharField(verbose_name="姓名", max_length=32)
mobile = models.CharField(verbose_name="手机号", max_length=11)
email = models.EmailField(verbose_name="邮箱", max_length=128)
gender = models.SmallIntegerField(verbose_name="性别", choices=((1, "男"), (2, "女")))
depart = models.ForeignKey(verbose_name="所属部门", to="Department", to_field="id", on_delete=models.CASCADE)
# 添加一个新列
age = models.IntegerField(verbose_name="年龄")
运行这个命令时
python manage.py makemigrations
会出现下面的情况:因为当新的field创建时,Django 会考虑到原先已创建的表里是有数据的,为了不影响现有的数据,Django会让你提供default value给新的列
第一种解决方案:
之后执行命令行
python manage.py migrate
第二种解决方案:
在创建一个model的时候,直接附上 default 的值
# models.py
class User(models.Model):
"""
用户表
"""
name = models.CharField(verbose_name="姓名", max_length=32)
mobile = models.CharField(verbose_name="手机号", max_length=11)
email = models.EmailField(verbose_name="邮箱", max_length=128)
gender = models.SmallIntegerField(verbose_name="性别", choices=((1, "男"), (2, "女")))
depart = models.ForeignKey(verbose_name="所属部门", to="Department", to_field="id", on_delete=models.CASCADE)
# 新增加的列
age2 = models.IntegerField(verbose_name="年龄", default=1)
直接运行下面的命令行就可以添加了:
python manage.py makemigrations
python manage.py migrate
运行这个命令时
python manage.py migrate
会出现这种结果
Operations to perform:
Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
出现无法生成表的原因是,去到 django_migrations 表里查看,就能知道之前已经创建了表。所以得在该表用sql语句来删除对应的app数据。
最后运行下面两个命令
python manage.py makemigrations
python manage.py migrate
这样就可以创建表了。
点个赞呗~