如何在基于Django类的视图中为Update创建提交时间戳?

时间:2017-03-13 16:18:56

标签: python django django-class-based-views

我是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有关吗?

3 个答案:

答案 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。除非您有多个需要createdlast_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)