You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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子类实例的内容当作数据库字段,元组类型的属性会被它直接跳过。

修复步骤

  1. 删掉模型中每个字段末尾的逗号,修正后的代码如下:
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)
  1. 删除之前生成的无效迁移文件(在对应app的migrations/目录下,找到2018-03-30生成的那个文件)
  2. 重新生成并执行迁移:
python manage.py makemigrations
python manage.py migrate

这样生成的迁移文件就会包含所有你定义的字段了!

内容的提问来源于stack exchange,提问作者RAVI RAJPUT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:09:18