django在一个字段中有多个更新日期

时间:2013-10-07 18:51:28

标签: python django datetime

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

我可以使用last_updated = models.DateTimeField()创建一个模型,然后让我的视图将日期时间保存到它,但是如果我想了解用户何时更新帖子的历史记录,而不仅仅是最多最近保存?

它应该是ManyToManyField还是CharField?

1 个答案:

答案 0 :(得分:2)

它根本不应该是一个领域。而是创建一个模型,使用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())