Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于过期日期时间在Django上使用getter和setter_Python_Django - Fatal编程技术网

Python 基于过期日期时间在Django上使用getter和setter

Python 基于过期日期时间在Django上使用getter和setter,python,django,Python,Django,我正在尝试制作一个自动化系统,当到期日期(和时间)到达时修改模型的值。它是Django1.9,在Python3上运行 我不确定是否正确应用了getter/setter属性 以下是我正在做的: from django.db import models from django.utils.timezone import now, localtime from datetime import * class Post(models.Model): created_at = models.Da

我正在尝试制作一个自动化系统,当到期日期(和时间)到达时修改模型的值。它是Django1.9,在Python3上运行

我不确定是否正确应用了getter/setter属性

以下是我正在做的:

from django.db import models
from django.utils.timezone import now, localtime
from datetime import *

class Post(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    _state = (
            ('1', 'active'),
            ('2', 'inactive'),
        )
    state = models.CharField(max_length=20, choices=state, default='active')
    duration = models.DurationField(blank=True, null=True)
    expires = models.DateTimeField(blank=True, null=True)
    updated_at = models.DateTimeField(auto_now=True)

@property
def state(self):
    return self.expires > localtime(now())

@state.setter
def state(self):
    if active() == False:
        return self._state = 2

def save(self, *args, **kwargs):
    self.created_at = localtime(now())
    self.expires = self.created_at + self.duration
    return super(Post, self).save(*args, **kwargs)
我使用下划线来定义默认值。 问题是到时候没有任何变化,我不知道如何调试它

我有两个问题:

  • 是否可以使用任何工具来调试

  • 这是使用getter和setter的正确方法吗?(我认为这很难让它发挥作用)


如果你知道这是怎么回事,请让我知道这没有多大意义,你只需在类上编写一些函数,并期望模型在时间到来时自动更新?所以你希望你的模型在保存时将自己标记为过期,对吗?这对我来说也没有意义。但我真的很迷茫,另一个用户告诉我,这实际上是可行的,因为你可以重写模型上的值。你需要一个外部“看门狗”,它会在某个时间表上触发模型的状态检查。如果每分钟一次对您来说足够精确,您可以编写一个管理命令,并从crontab调用它。我认为您误解了别人告诉您的内容。另一个用户可能正在谈论一个state属性,当访问该属性时,它返回时间是否已过期。但这只是一个表象,它不会为您更新数据库。