Django Migrations问题:makemigrations忽略模型文件部分字段
解决Django makemigrations忽略模型字段的问题
嘿,我一眼就瞅出问题所在了——你的模型字段定义后面都多了个逗号!这会让Python把每个字段解析成单元素元组,而不是Django迁移系统能识别的模型字段实例,所以makemigrations才会直接忽略这些字段。
先看看你的原模型代码:
from django.db import models class Donor(models.Model): Donor_name = models.CharField(max_length=150), Donor_status = models.IntegerField(), Donor_city = models.CharField(max_length=50), Donor_group = models.CharField(max_length=10), Donor_phone = models.CharField(max_length=12), Donor_mail = models.EmailField(max_length=50)
再对比生成的不完整迁移文件:
# Generated by Django 2.0.2 on 2018-03-30 09:19 from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Donor', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), # 自定义字段全部缺失,只有默认的id字段 ], ), ]
问题根源
在Python里,行尾加逗号会把赋值结果变成元组(比如x = 1,等价于x = (1,))。Django的模型系统只会把类属性中直接赋值为Field子类实例的内容当作数据库字段,元组类型的属性会被它直接跳过。
修复步骤
- 删掉模型中每个字段末尾的逗号,修正后的代码如下:
from django.db import models class Donor(models.Model): Donor_name = models.CharField(max_length=150) Donor_status = models.IntegerField() Donor_city = models.CharField(max_length=50) Donor_group = models.CharField(max_length=10) Donor_phone = models.CharField(max_length=12) Donor_mail = models.EmailField(max_length=50)
- 删除之前生成的无效迁移文件(在对应app的
migrations/目录下,找到2018-03-30生成的那个文件) - 重新生成并执行迁移:
python manage.py makemigrations python manage.py migrate
这样生成的迁移文件就会包含所有你定义的字段了!
内容的提问来源于stack exchange,提问作者RAVI RAJPUT
相关产品推荐
相关产品推荐

