Django显示创建时间和修改时间

因为想在博客页面添加一个博客的创建时间和最后的修改时间,所以首先想到的是在模型类里面定义两个DateTimeField字段,一个使用auto_now_add(第一次创建模型类时添加,以后不再改动),另一个使用auto_now(添加或者最后一次修改该模型时的时间):

    create_timestamp = models.DateTimeField(auto_now_add=True) 
    last_edit_timestamp = models.DateTimeField(auto_now=True)

但是在迁移文件的时候发现第二个时间戳字段last_edit_timestamp并没有在数据库里面创建出来,遂上网查资料,得知:
auto_nowauto_now_add被设置为True后,会导致其字段属性editable=Falseblank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。也就是说,这两个字段不能被手动修改覆盖,auto_now在每次调用Model.save()时,都会强制更新,而auto_now_add创建了第一次时间戳之后不会再变化,均为只读状态。
那如何解决同时显示创建时间和更新时间的需求呢?
一个办法是不使用auto_nowauto_now_add属性,重写model.save方法,模型类定义如下:

    class BlogPost(models.Model):
        title = models.CharField(max_length=150,verbose_name='标题')
        body = models.TextField(verbose_name='正文')
        create_timestamp = models.DateTimeField()
        last_edit_timestamp = models.DateTimeField(default=datetime.now())
        is_delete = models.BooleanField(default=0)
    
        class Meta:
            ordering = ('-create_timestamp',)
            
    	def save(self, *args,**kwargs):
            if not self.id:
                self.create_timestamp = timezone.now()
            self.last_edit_timestamp = timezone.now()
            return super(BlogPost,self).save(*args,**kwargs)

模板显示代码:

    {% for post in posts %}
            <h2>{{ post.title }}</h2>
            <p>{{ post.body }}</p>
            <p>创建时间:{{ post.create_timestamp|date:'Y-m-d H:i:s' }}</p>
            <p>最后编辑时间:{{ post.last_edit_timestamp|date:'Y-m-d H:i:s' }}</p>
            <a href="/blog/edit_page{{ post.id }}">编辑</a>
            <a href="/blog/delete{{ post.id }}">删除</a>
            <hr>
        {% endfor %}

这样当每次修改Blog内容时,last_edit_timestamp都会自动更新时间:
创建博文
修改博文之后
修改博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值