Django中Plateforme模型字段默认值修改未生效求助
解决Django模型字段默认值修改不生效的问题
1. 先确认模型代码修改是否准确
检查Plateforme模型里name字段的定义,确保默认值确实改成了'Plateforme_Test_1',比如:
class Plateforme(models.Model): name = models.CharField(max_length=255, default='Plateforme_Test_1') # 其他字段定义...
注意核对字符串拼写、引号格式,确保没有笔误。
2. 重新生成并执行迁移
即便删除过旧迁移文件,也要严格走一遍流程:
- 运行
python manage.py makemigrations,查看输出是否包含Plateforme模型name字段默认值修改的迁移记录 - 再运行
python manage.py migrate,确认迁移执行成功,无报错信息
3. 排查自定义save()方法或信号是否覆盖默认值
如果模型有自定义的save()方法,或者项目里存在pre_save信号,可能会在保存对象时强制设置旧默认值:
- 检查模型的
save()方法:
def save(self, *args, **kwargs): # 留意是否有这类硬编码的逻辑 if not self.name: self.name = 'default_plateforme' super().save(*args, **kwargs)
- 检查项目中的信号代码:
@receiver(pre_save, sender=Plateforme) def set_plateforme_name(sender, instance, **kwargs): if not instance.name: instance.name = 'default_plateforme'
如果有这类代码,同步把默认值改成'Plateforme_Test_1'即可。
4. 检查API层是否硬编码了默认值
如果是通过API创建对象,要排查序列化器或视图是否手动设置了旧默认值:
- 序列化器示例:
class PlateformeSerializer(serializers.ModelSerializer): class Meta: model = Plateforme fields = '__all__' def create(self, validated_data): # 检查是否存在这类强制设置的代码 validated_data.setdefault('name', 'default_plateforme') return super().create(validated_data)
- 视图示例:
class PlateformeCreateView(generics.CreateAPIView): serializer_class = PlateformeSerializer def perform_create(self, serializer): serializer.save(name='default_plateforme')
这类硬编码逻辑会直接忽略模型的默认值设置,需要改成新的默认值。
5. 验证对象创建逻辑
直接在Django Shell中创建对象,测试默认值是否生效:
python manage.py shell >>> from your_app.models import Plateforme >>> p = Plateforme.objects.create() >>> print(p.name)
如果Shell中输出Plateforme_Test_1,说明模型和迁移没问题,问题出在API层;如果Shell中还是旧值,再回头检查模型代码和迁移流程。
内容的提问来源于stack exchange,提问作者JoJoWasACode
相关产品推荐
相关产品推荐

