【问题标题】:How to use date__range filter efficiently in django如何在 django 中有效地使用 date__range 过滤器
【发布时间】:2016-04-05 05:04:12
【问题描述】:

我的模特是

class SMS(models.Model):
    subscriberId = models.ForeignKey(Subscriber, null=False)
    epochTime =  models.IntegerField(null = False)
    time = models.CharField(max_length= 250 ,blank = False)
    date = models.CharField(max_length= 50 ,blank = False)

现在,问题是我将日期保存为字符 1-11-2015 并使用 date__range 过滤器,如下所示:

SMS.objects.filter(date__range =["1-11-2015","12-11-2015"]).count()

但它给了我错误的结果。

那么,如何有效地使用这个date__range 过滤器呢?

【问题讨论】:

  • 只使用 Char 的 DateTimeField
  • 或者DateField

标签: python django django-models


【解决方案1】:

您在CharField 上执行__range 运算符,因此范围比较是基于字符而不是日期进行的。

您已经有一个字段epochTime = models.IntegerField(null = False),我假设它是一个 UNIX 时间纪元。

要开始软,您已经可以执行epochTime__range 查询,如果您传入epochTime__range=(timestamp_integer_start, timestamp_integer_end) 范围,该查询可以正确给出结果。 You'll have to pass an integer that represents the date/time for this.

否则,您可以添加 timestamp = models.DateTimeField() 并复制 epochTime 字段中的值。

UNIX timestamp in integer format to a Python datetime object 转换很容易,您可以将其作为 Django 中 DateTimeField 的值传入。

底线是,无需在模型中复制 datetime 字段,使用表示时间戳的单个字段。我推荐DateTimeField,因为您在 Django 中的查询会更容易。

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 2010-10-26
    • 2021-11-26
    • 2013-04-09
    • 2010-10-20
    • 2020-10-25
    • 2016-06-23
    • 2011-08-02
    相关资源
    最近更新 更多