代码之家  ›  专栏  ›  技术社区  ›  Roger

django模型窗体对象的自动创建日期?

  •  112
  • Roger  · 技术社区  · 16 年前

    自动设置对象的创建日期以及记录对象上次更新时间的字段的最佳方法是什么?

    models.py:

    created_at = models.DateTimeField(False, True, editable=False)
    updated_at = models.DateTimeField(True, True, editable=False)
    

    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            return HttpResponseRedirect('obj_list')
    

    objects_object.created_at may not be NULL
    

    我必须自己手动设置这个值吗?我以为这就是传递给 DateTimeField (或者它们只是默认值,既然我已经设置了 editable=False

    最好的办法是什么?安 __init__ 方法?

    1 回复  |  直到 7 年前
        1
  •  357
  •   johnthagen Matthew Scharley    7 年前

    你可以用 auto_now 和 auto_now_add updated_at 和 created_at 分别。

    class MyModel(models.Model):
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    
        2
  •  56
  •   Chitrank Dixit    6 年前

    auto_now_add 和 auto_now 当然可以,但最好是创建一个抽象类,并在需要的任何模型中使用它 created_at 和 updated_at 领域。

    class TimeStampMixin(models.Model):
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    
        class Meta:
            abstract = True
    

    class Posts(TimeStampMixin):
        name = models.CharField(max_length=50)
        ...
        ...
    

    这样,您就可以在Django-DRY中利用面向对象的可重用性(不要重复)