如何在基于 Django class 的更新视图中创建提交时间戳?

How to create a timestamp on submit in Django class based views for Update?

我是 Django 中基于 class 的视图的新手,使用的是简单的 UpdateView CBV。该视图有许多字段显示在模板上,除了一个; Date field。如何向该字段添加时间戳?仅应在第一次创建对象时添加时间戳。从下一次开始,它应该只显示第一次添加的时间戳。这是我的代码:

class ReviewsEdit(UpdateView):
    model = ProductReview
    fields = ['title', 'body', 'score', 'responder_name', 'response']     
    template_name = 'review_system/review_edit.html'
    context_object_name = 'review'

ProductReview 模型具有上述所有字段和另一个日期字段,我想在单击提交按钮时将其与时间戳数据一起保存 - 仅当提交时它为空白。这对 CBV 可行吗?

如果您想实现让您知道对象创建时间的字段 and/or 最后编辑,您可以使用这些 Django 字段实现:

class TouchStampModel(Model):
    created = DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)
    last_modified = DateTimeField(auto_now=True, editable=False, null=False, blank=False)

    class Meta:
        abstract = True

任何模型子类都会有这些字段,默认情况下它们是不可编辑的(不会显示在编辑表单中),last_modified 将在每次数据库更新时自动更新,而 created 将设置为 DB 插入时间。

当然,您可以修改现有模型的 DateTimeField。除非您有多个模型需要 createdlast_modified.

,否则不需要超类
  class ReviewModel(Model):
       created_at = DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)

那你为什么不直接在模板上显示它。

obj.created_at

这将始终显示评论的创建时间

我明白了,我不得不重写 save() 方法来完成它。它的工作原理是这样的。定义模型后,覆盖 save() 方法。

def save(self, *args, **kwargs):
 if not self.your.field:
        self.date_field = datetime.datetime.now()
 super(ModelName, self).save(*args, **kwargs)