【问题标题】:Getting a query set between a range of dates Django获取一系列日期之间的查询集 Django
【发布时间】:2020-03-04 04:42:44
【问题描述】:

我正在尝试使用查询集返回 2 个不同日期之间的项目列表,即过去的日期和当前时间。

我得到的错误是 TypeError: an integer is required (got type str)

views.py

import datetime
import pytz

first_date = "2020-01-01 19:17:35.909424"
last_date = timezone.now()

我不希望返回任何日期在未来的东西

这是查询中的过滤器

.filter(hide_sentance_until=(date(first_date), date(last_date)))

这是完整的查询集,但上面的过滤器导致了他的问题

zip_flash_sentances = (
    model.objects
    .filter(show_sentance=True)
    .filter(
        hide_sentance_until=(date(first_date), date(last_date))
    )
    .order_by("?")
    .filter(username_id = user_id_fk)
    .values_list('sentance_eng', 'sentance_esp', 'id')
    .first()
 )

我认为这可能是日期比较问题,但这是我的模型字段

models.py

hide_sentance_until = models.DateTimeField(default=datetime.now(), blank=True)

谢谢

【问题讨论】:

  • date 函数从何而来?

标签: django django-models django-queryset


【解决方案1】:

您可以使用gtelte 查询属性:

first_datetime = datetime.datetime.strptime(first_date, '%Y-%m-%d %H:%M:%S.%f')
last_date = timezone.now()


.filter(hide_sentance_until__lte=last_date,hide_sentance_until__gte=first_time)

【讨论】:

    【解决方案2】:

    有一件事是您指定了一个特定值,该值是在您的代码编译为默认值时确定的。让实际的当前日期成为您想要的值:

    hide_sentance_until = models.DateTimeField(default=datetime.now, blank=True)
    

    那么你需要从字符串中解析出日期时间。

    date_value = datetime.strptime(first_date, DATETIME_FORMAT_YOU_USE)
    

    其中 DATETIME_FORMAT_YOU_USE 是您正在使用的series of format codes from Python

    最后你应该使用__range查询集字段查找。

    .filter(
        hide_sentance_until__range=(date_value, timezone.now())
    ) 
    

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2015-12-08
      • 2020-10-05
      • 2021-09-01
      • 2021-11-28
      • 1970-01-01
      • 2014-04-19
      • 2022-01-02
      • 2013-12-23
      相关资源
      最近更新 更多