用Djangorm恰当地造一个BETWEEN子句

2024-06-16 09:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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()
            )    

Tags: tonamefromdateonmodelsdeletenow
3条回答

您应该尝试以下代码(通过删除\uu日期):

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

您可以向模型中添加函数。你知道吗

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

您可以这样做(通过删除__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)
            )

相关问题 更多 >