帖子更新后,如何在模板中将“ created_at”字段替换为“ updated_at”字段?

时间:2019-05-13 04:56:56

标签: python django datetime model

我有以下模型,其中分别是created_atupdated_at字段:

class BlogPost(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField()
    slug = models.SlugField(blank=True, unique=True)
    image = models.ImageField(default='default.jpg',upload_to='posts/%Y/%m/%d')
    created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

这是我创建帖子时的结果: enter image description here

我希望它仅显示Posted now文本(当前时间),并且只有当我更新该字段时,它才应显示Updated now文本。

这是上面模板的html:

<small class="text-secondary">Posted {{ object.created_at|naturaltime }}</small><br>
<small class="text-secondary">Updated {{ object.updated_at|naturaltime }}</small><br>

我不知道是否要更改我的model或在模板中使用某些if conditions,请您帮帮我吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

如果您将updated_at设置为可空,并且仅在帖子更新后进行设置,则对updated_at进行空检查将是确定帖子是否已更新的简便可靠的方法。

<small class="text-secondary">
    {% if object.updated_at %}
        Updated {{ object.updated_at|naturaltime }}
    {% else %}
        Posted {{ object.created_at|naturaltime }}
    {% endif %}
</small><br>

但是,由于始终设置updated_at(包括创建时),因此针对created_at 可能的相等性检查会起作用。但是,如果尝试这样做,则应仔细检查以查看这些日期时间是否总是总是完全相等。该检查是否真正有效取决于这两个值的生成方式和时间。

如果您不确定100%是否匹配日期时间,则可能需要选择一个较小的增量,以便合理地猜测帖子是否已更新。

def updated(self):
    return (self.updated_at - self.created_at) < timedelta(microseconds=100)

我认为您最好将模型上的updated_at设为空或保留updated标志,而不要依赖于在各个平台上可能不一致的数学。