【问题标题】:django multiple update dates in one fielddjango在一个字段中有多个更新日期
【发布时间】:2013-10-14 11:16:43
【问题描述】:

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

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

应该是 ManyToManyField 还是 CharField?

【问题讨论】:

    标签: python django datetime


    【解决方案1】:

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

    class YourModel(models.Model):
        name = models.CharField(max_length=100)
    
    class YourModelUpdateHistory(models.Model):
        your_model = models.ForeignKey('YourModel')
        updated = models.DateTimeField() 
    

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

    您应该在更新YourModel 对象时创建一个新的YourModelUpdateHistory 对象。您甚至可以将其设置为自动完成,这要归功于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())
    

    【讨论】:

    • 好的,我想我明白了 - 每当保存 YourModel 时,就会使用当前日期时间在 YourModelUpdateHistory 中创建一个新条目,我可以在保存更新时在视图中设置它?
    • 我更新了我的帖子,例如每次更新 YourModel 时自动创建 YourModelUpdateHistory 模型。
    • 做到了,它正在工作。虽然我必须有“YourModelUpdateHistory.objects.create(your_model=self, updated=timezone.now()) 但它正在这样做。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多