我有一个看起来像这样的模型:
class Report(models.Model):
updater = models.CharField(max_length=15)
pub_date = models.DateTimeField(auto_add_now=True)
identifier = models.CharField(max_length=100)
... and so on...
还有一些字段,但它们与问题无关。现在该网站的功能非常简单——用户可以查看旧报告及其数据,并可以对其进行编辑或添加新的。
但是,标识符字段实际上是一个整数,表示正在报告的日志文件。大多数时候,每个报告都有一个日志。但有时它不止一个。我将其作为 CharField 进行,因为我构建了该站点以替换旧的 sharepoint 2003 网站,该网站被视为简单文本。所以我希望在我的下一个版本中,它应该是这样的,即像这样:
class Report(models.Model):
updater = models.CharField(max_length=15)
pub_date = models.DateTimeField(auto_add_now=True)
... and so on...
class Log(models.Model):
report = models.ForeignKey(Report)
identifier = models.IntegerField()
问题是,由于在旧站点中该字段是 CharField,因此人们可以随意使用它。这意味着,即使他们在同一份报告中更新了各种日志,他们也只是这样做了<logid1>, <logid2>
。有时他们会添加一些文字<logid1> which is related to <logid2>
。
所以我想改变这一点,但我不想丢失所有旧数据,也无法修复所有这些边缘情况(数据库包含大约 22000 个报告)。我考虑将其添加到报告中:
def disp_id(self):
if self.pub_date < ... #the day I'll do the update
return self.identifier
else:
return ', '.join([log.identifier for log in self.log_set.all()])
但是,我现在并没有真正摆脱旧领域,是吗?我只是添加一个新的并保留某个日期的原始空值。
据我所知,我想做的事情是不可能的。我只是问,因为我知道也许我不是第一个处理这类事情的人,也许有一个我不知道的解决方案。
希望我的解释足够清楚,在此先感谢!