2

在我的 Django 模型中创建“更新历史”字段以便跟踪多个更新日期的最佳方法是什么?

我可以使用 last_updated = models.DateTimeField() 创建一个模型,然后让我的视图将日期时间保存到其中,但是如果我想知道用户何时更新他们的帖子,而不仅仅是最近的保存,该怎么办?

它应该是 ManyToManyField 还是 CharField?

4

1 回答 1

3

它根本不应该是一个领域。而是创建一个模型,它将使用 ForeignKey 引用您的主模型:

class YourModel(models.Model):
    name = models.CharField(max_length=100)

class YourModelUpdateHistory(models.Model):
    your_model = models.ForeignKey('YourModel')
    updated = models.DateTimeField() 

这样,您可以为每个模型设置多个日期,同时保持数据库正确规范化。它还允许您在将来添加其他字段以及有关每次更新的其他信息(例如谁更新了对象)。

YourModelUpdateHistory每当您更新对象时,都应该创建一个新YourModel对象。您甚至可以将其设置为自动完成,这要归功于该save()方法(每次保存对象时由 Django 调用):

from django.utils import timezone

class YourModel(models.Model):
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        super(YourModel, self).save(*args, **kwargs)
        YourModelUpdateHistory.objects.create(your_model=self, updated=timezone.now())
于 2013-10-07T18:56:16.467 回答