南迁DateField到IntegerField

2024-01-27

我想改变我的模型

class Source(models.Model):
    release_date = models.DateField()

to

class Source(models.Model):
    release_date = models.IntegerField()

正如预期的那样,我收到一个错误

django.db.utils.DataError: (1264, "Out of range value for column 'release_date' at row 1")

我真正想要的是,只保存这一年IntegerField因为这就是我所需要的。是否有一种非常智能的方法来获取现有日期的年份字段并通过更改方法将其迁移到新的 IntegerField

def forwards(self, orm):

如果没有,我怎样才能在不丢失的情况下更改字段类型all数据,丢失存储的日期,将是我要付出的代价。


一种选择是将任务分为 3 个迁移:

  • 架构迁移:添加release_year field
  • 数据迁移 http://south.readthedocs.org/en/latest/tutorial/part3.html#data-migrations: 填充release_year字段来自release_date field
  • 架构迁移:删除release_date字段并重命名release_year to release_date

模式迁移将被南方自动捕获(使用schemamigration --auto),但是您需要手动编写数据迁移,以下是您的方法forwards()方法应该如下所示:

def forwards(self, orm):
    for source in orm.Source.objects.all():
        source.release_year = source.release_date.year
        source.save()

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

南迁DateField到IntegerField 的相关文章

随机推荐