我是Django中基于类的视图的新手,并使用了一个简单的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有关吗?
答案 0 :(得分:2)
如果你想实现让你知道对象何时被创建和/或最后编辑的字段,你可以用这些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
的模型,否则不需要超类。
答案 1 :(得分:2)
class ReviewModel(Model):
created_at = DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)
为什么不在模板上显示它呢。
obj.created_at
这将始终显示审核的创建时间
答案 2 :(得分:1)
我明白了,我不得不超越save()
方法来完成它。它的工作原理是这样的。定义模型后,覆盖save()
方法。
def save(self, *args, **kwargs):
if not self.your.field:
self.date_field = datetime.datetime.now()
super(ModelName, self).save(*args, **kwargs)