当更新同一模型中的另一个特定字段时,如何更新 Django models.DateTimeField?

Str*_*ire 5 django datetime django-models

我在这里的模型中有两个字段:

is_active = models.BooleanField(default=False)
active_from = models.DateTimeField(blank=True)
Run Code Online (Sandbox Code Playgroud)

is_active设置为True,我想active_from进行更新,以当前日期时间。

我该怎么做?如果在一个领域也有一种更清洁的方法,我愿意接受替代方案。

谢谢!

编辑:我想在模型中包含它以保持封装。这将是 API 的一部分。

Jie*_*ter 7

一种方法是save()在您的自定义模型上定义一个方法来寻找is_active. 没有简单的方法可以实现这一点:您需要is_active通过定义自定义__init__-method手动保存值的先前状态。它可能看起来像这样:

class MyModel(models.Model):
    is_active = models.BooleanField(default=False)
    active_from = models.DateTimeField(blank=True)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__is_active = self.active

    def save(self, *args, **kwargs):
        if self.is_active and not self.__is_active:
            self.active_from = datetime.now()
        super().save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

这个问题有一些答案可能会有所帮助。


mar*_*hep 1

当您同时切换is_active更新时。active_from

例如:

def toggle_user_active_and_update(request, *a, **kw):
    request.user.is_active = !request.user.is_active
    request.user.active_from = datetime.datetime.now()
    request.user.save()
Run Code Online (Sandbox Code Playgroud)