我有一个文本字段,需要进行版本的模型。
class Book(models.Model):
title = models.CharField(max_length=100)
summary = models.TextField()
预期的行为如下:
- 如果我创建一个新的书摘要,文本将被正常保存
- 如果汇总更新,旧的国家需要与一个版本号和时间戳存储在某处
- 它应该是很容易可以查询当前,一系列或特定版本
- 只有现场
summary
应该版本,而不是整个模型
我应该怎么做呢?
我有一个文本字段,需要进行版本的模型。
class Book(models.Model):
title = models.CharField(max_length=100)
summary = models.TextField()
预期的行为如下:
summary
应该版本,而不是整个模型 我应该怎么做呢?
明白了自己。
首先创建一个名为新模式SummaryHistory
:
class SummaryHistory(models.Model):
version = models.IntegerField(editable=False)
book = models.ForeignKey('Book')
text = models.TextField()
class Meta:
unique_together = ('version', 'book',)
def save(self, *args, **kwargs):
# start with version 1 and increment it for each book
current_version = SummaryHistory.objects.filter(book=self.book).order_by('-version')[:1]
self.version = current_version[0].version + 1 if current_version else 1
super(SummaryHistory, self).save(*args, **kwargs)
现在如下延长最初的模型:
class Book(models.Model):
title = models.CharField(max_length=100)
summary = models.TextField()
def summary_history(self):
return SummaryHistory.objects.filter(book=self).order_by('-version')
def save(self, *args, **kwargs):
super(Book, self).save(*args, **kwargs)
# save summary history
summary_history = self.summary_history()
if not summary_history or self.summary != summary_history[0].text:
newSummary = SummaryHistory(book=self, text=self.summary)
newSummary.save()
现在,每次更新一本书,总结为特定的书新增加的版本时,将创建,除非它并没有改变。