如何在基于 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。除非您有多个模型需要 created
和 last_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)
我是 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。除非您有多个模型需要 created
和 last_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)