栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django迁移添加默认具有模型功能的字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django迁移添加默认具有模型功能的字段

我刚刚学习了如何通过一次迁移来做到这一点!

当运行

makemigrationsdjango
时,应要求你设置一个默认值。在这里定义所有可以使它满意的内容,最后将完成AddField你提到的迁移。

migrations.AddField(    model_name='series',    name='updated_as',    field=models.DateTimeField(default=????, auto_now=True),),

将此操作更改为3个操作:

  1. 最初使该字段可为空,因此将添加该列。
  2. 调用一个函数以根据需要填充该字段。
  3. 更改字段(带有
    AlterField
    )以使其不可为空(如上述,没有默认设置)。
    所以你最终得到类似的东西。
migrations.AddField(    model_name='series',    name='updated_as',    field=models.DateTimeField(null=True, auto_now=True),),migrations.RunPython(set_my_defaults, reverse_func),migrations.AlterField(    model_name='series',    name='updated_as',    field=models.DateTimeField(auto_now=True),),

你的函数定义为:

def set_my_defaults(apps, schema_editor):    Series = apps.get_model('myapp', 'Series')    for series in Series.objects.all().iterator():        series.updated_as = datetime.now() + timedelta(days=series.some_other_field)        series.save()def reverse_func(apps, schema_editor):    pass  # pre for reverting migration, if any

除了,你知道,并不可怕。考虑使用F表达式和/或数据库函数来提高大型数据库的迁移性能。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393935.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号