Django在DateField过期后更改BooleanField值
我想能够自动设置暂停为假(如果是真的,当然)时,结束_暂停_日期过去(因此,如果它存在) models.py 没有第三方应用程序,有没有办法做到这一点?我曾想过在模型中定义一个函数(但我认为这样做没有多大意义): 你可以试试,比如:Django在DateField过期后更改BooleanField值,django,python-3.6,Django,Python 3.6,我想能够自动设置暂停为假(如果是真的,当然)时,结束_暂停_日期过去(因此,如果它存在) models.py 没有第三方应用程序,有没有办法做到这一点?我曾想过在模型中定义一个函数(但我认为这样做没有多大意义): 你可以试试,比如: class Profile(models.Model): start_suspension_date = models.DateField(null=True, blank=True) end_suspension_date = models.D
class Profile(models.Model):
start_suspension_date = models.DateField(null=True, blank=True)
end_suspension_date = models.DateField(null=True, blank=True)
# ... other fields
@property
def suspended(self):
return date.today() < self.end_suspension_date
类配置文件(models.Model):
开始日期=models.DateField(null=True,blank=True)
end\u suspension\u date=models.DateField(null=True,blank=True)
# ... 其他领域
@财产
def暂停(自):
返回日期。今天()
你可以试试,比如:
class Profile(models.Model):
start_suspension_date = models.DateField(null=True, blank=True)
end_suspension_date = models.DateField(null=True, blank=True)
# ... other fields
@property
def suspended(self):
return date.today() < self.end_suspension_date
类配置文件(models.Model):
开始日期=models.DateField(null=True,blank=True)
end\u suspension\u date=models.DateField(null=True,blank=True)
# ... 其他领域
@财产
def暂停(自):
返回日期。今天()
否,您需要定义一个任务,以筛选暂停结束
我更喜欢的另一种方法是用属性替换suspended
字段,因为有一个存储“is the user suspended”的字段和一个存储“when is the user Non Stonded”的字段是多余的,因为我们知道当前日期
更惯用的说法是将其称为“已挂起”,因此:
class Profile(models.Model):
...
@property
def is_suspended(self):
return date.today() < self.end_suspension_date
类配置文件(models.Model):
...
@财产
def已挂起(自):
返回日期。今天()
然后在登录时查看权限检查等,只需访问配置文件。已挂起
简单比复杂好:)
阿尔迪,小心时区。经验法则:存储UTC日期而不是本地日期。不,您需要定义一个任务来过滤暂停结束
我更喜欢的另一种方法是用属性替换suspended
字段,因为有一个存储“is the user suspended”的字段和一个存储“when is the user Non Stonded”的字段是多余的,因为我们知道当前日期
更惯用的说法是将其称为“已挂起”,因此:
class Profile(models.Model):
...
@property
def is_suspended(self):
return date.today() < self.end_suspension_date
类配置文件(models.Model):
...
@财产
def已挂起(自):
返回日期。今天()
然后在登录时查看权限检查等,只需访问配置文件。已挂起
简单比复杂好:)
阿尔迪,小心时区。经验法则:存储UTC日期而不是本地日期。副作用是,在我的应用程序中,配置文件不需要登录,因此如果我每次刷新页面时都检查profile.u是否挂起,它将增加大量加载时间(例如,如果我有许多配置文件条目)就数据库读取而言,这两种解决方案之间没有区别:如果使用了布尔字段,您仍然需要点击数据库来检查它是否为真,或者我可以设置一个控件,使调用一天只暂停一次。。。同样感谢UTC的建议,我将检查如何(如果我能做到的话)完成并更新帖子。坦率地说,我认为你想得太多了,正处于过早优化的边缘。从属性开始,并在以后发现性能问题时对其进行优化。专业提示:您不会在这里看到性能问题。将你的时间和精力集中在重要的事情上。副作用是,在我的应用程序中,配置文件不需要登录,因此如果我每次刷新页面时都检查profile.is_挂起,它将增加大量加载时间(例如,如果我有许多配置文件条目)就数据库读取而言,这两种解决方案之间没有区别:如果使用了布尔字段,您仍然需要点击数据库来检查它是否为真,或者我可以设置一个控件,使调用一天只暂停一次。。。同样感谢UTC的建议,我将检查如何(如果我能做到的话)完成并更新帖子。坦率地说,我认为你想得太多了,正处于过早优化的边缘。从属性开始,并在以后发现性能问题时对其进行优化。专业提示:您不会在这里看到性能问题。把你的时间和精力集中在重要的事情上。