在 Django ORM 中正确制作 BETWEEN 子句

Properly make a BETWEEN clause in DjangoORM

我在使用 DjangoORM 在我的数据库中查询所需结果时遇到问题。

这是我的模型。

class HeatWatchList(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                   related_name='watchlist_users', on_delete=models.CASCADE)

    heat = models.OneToOneField(Heat, related_name='heat_watch_list', 
                   on_delete=models.CASCADE)

    next_date_from = models.DateTimeField()
    next_date_to = models.DateTimeField()

我想获取今天日期介于 next_date_fromnext_date_to 字段之间的所有记录。

我可以很容易地在原始文件中做到这一点 sql:

SELECT 
    *
FROM
    farm_management_db.heat_heatwatchlist
WHERE
    DATE(now()) BETWEEN DATE(next_date_from) AND DATE(next_date_to);

这是我到目前为止尝试的方法,但我没有得到任何记录:

HeatWatchList.objects.filter(
                next_date_from__date__gte=datetime.now().date(),
                next_date_to__date__lte=datetime.now().date()
            )    

您可以向您的模型添加一个函数。

def is_between_date(self): if Timezone.zone() > next_date_from and timezone.zone() < next_date_to: return True return False

您应该改为尝试以下代码(通过删除 __date):

HeatWatchList.objects.filter(
                next_date_from__gte=datetime.now().date(),
                next_date_to__lte='2017-01-23'
            )   

您可以这样做(通过删除 __date)并使用 datetime.combine

from datetime import  datetime, time

HeatWatchList.objects.filter(
                next_date_from__gte=datetime.combine(datetime.now().date(), time.min),
                next_date_to__lte=datetime.combine(datetime.now().date(), time.max)
            )