首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django DateTimeRangeField: DateTimeRangeField

Django DateTimeRangeField: DateTimeRangeField
EN

Stack Overflow用户
提问于 2020-10-14 21:57:45
回答 1查看 564关注 0票数 2

我想要一个"active_in“属性作为时间框架。我假设DBMS是针对postgresql字段进行优化的,因此最好使用DateTimeRangeField而不是为start_date和end_date使用两个单独的字段。

为此,我希望为字段提供一个默认值。

代码语言:javascript
复制
active_in = models.DateTimeRangeField(default=timezone.now+'-'+timezone.now+10YEARS)
  • 我对DateTimeRangeField性能的假设是真的吗?
  • 是否有一个聪明的解决方案,不管是创建一个新的;函数,类,还是简单地操作第二位数字?

我可能的解决方案:

使用字符串操作的代码:

代码语言:javascript
复制
active_in = models.DateTimeRangeField(default=timezone.now+'-'+timezone.now[:-2]+'30')

使用自定义函数对象的代码:(从此处调整:https://stackoverflow.com/a/27491426/7458018)

代码语言:javascript
复制
def today_years_ahead():
    return timezone.now + '-' timezone.now() + timezone.timedelta(years=10)

class MyModel(models.Model):
    ...
    active_in = models.DateTimeRangeField(default=today_years_ahead)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 12:08:19

不需要字符串操作,因为这个字段的记录在案类型是DateTimeTZRange

我不能说我以前用过这个领域,但是像这样的东西应该能起作用:

代码语言:javascript
复制
from psycopg2.extras import DateTimeTZRange
from django.utils import timezone
from datetime import timedelta

def next_ten_years():
    now = timezone.now()

    # use a more accurate version of "10 years" if you need it
    return DateTimeTZRange(now, now + timedelta(days=3652))

class MyModel(models.Model):
    ...
    active_in = models.DateTimeRangeField(default=next_ten_years)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64362067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档