【发布时间】:2022-01-05 07:00:59
【问题描述】:
我们打算从旧的开始-结束日期值修改我们的模型之一,以使用开始日期和长度。但是,这确实带来了挑战,因为我们希望为新字段提供默认值。
在这种情况下,是否可以在我们创建新字段的地方运行迁移,根据模型旧的起始字段给它一个值
from datetime import date as Date
from django.db import models
class Period(models.Model):
#These are our new fields to replace old fields
period_length=models.IntegerField(default=12)
starting_date=models.DateField(default=Date.today)
#Old fields. We want to calculate the period length based on these before we remove them
start_day = models.IntegerField(default=1)
start_month = models.IntegerField(default=1)
end_day = models.IntegerField(default=31)
end_month = models.IntegerField(default=12)
开始月份和结束月份可以介于 1 到 12 之间,因此我们需要进行大量计算才能获得正确的长度。我们有没有办法在迁移中运行一个函数,在添加新字段后,在调用删除旧字段之前计算它们的新值?
我知道我可以使用 makemigrations 创建基本的添加/删除字段,但我想在两者之间添加值计算。我考虑过的其他选择是首先运行迁移以添加字段,然后运行自定义命令来计算字段,然后进行第二次迁移以删除旧字段,但这感觉它更有可能破坏某些东西。
【问题讨论】:
-
一个 DateField 包含一年,但您没有存储年份,您从哪里获得年份?
-
年份相对不重要。旧系统假定假定具体时期,每年都有特定的开始和结束日期。但是,从那以后我被告知我们可能有 18 个月的周期,这在旧系统中是不可行的。
标签: python django django-models django-migrations