如何在django中有效地使用date__range过滤器

时间:2015-12-31 07:25:54

标签: python django django-models

我的模特是

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过滤器?

1 个答案:

答案 0 :(得分:0)

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

您已经有一个字段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中的查询会更容易。