python - Django 日期按月份过滤

标签 python django

我需要编写一个查询,返回小于或等于某个月某天的所有对象。年份并不重要。获取特定日期/月份的对象非常容易(假设 now = datetime.datetime.now()):

posts = TodaysObject.objects.filter(publish_date__day=now.day, publish_date__month=now.month)

但是我不能这样做:

posts = TodaysObject.objects.filter(publish_date__day__lte=now.day, publish_date__month=now.month)

似乎 Django 认为我在组合多个字段查找时尝试进行连接 (publish_date__day__lte)。在 Django 中执行此操作的最佳方法是什么?

最佳答案

试试这个:

选项 1:

from django.db.models import Q

datafilter = Q()
for i in xrange(1, now.day+1):
    datafilter = datafilter | Q(publish_date__day=i)
datafilter = datafilter & Q(publish_date__month=now.month)
posts = TodaysObject.objects.filter(datafilter)

选项 2:

执行原始 sql 查询:

def query_dicts(query_string, *query_args):
    from django.db import connection
    cursor = connection.cursor()
    cursor.execute(query_string, query_args)
    col_names = [desc[0] for desc in cursor.description]
    while True:
        row = cursor.fetchone()
        if row is None:
            break
        row_dict = dict(izip(col_names, row))
        yield row_dict
    return
posts = query_dicts('SELECT * FROM tablename WHERE DAY(publish_date)<=%s AND MONTH(publish_date)=%s', now.day, now.month)

使用 extra() 函数:

posts = TodaysObject.objects.extra([where='DAY(publish_date)<=%d AND MONTH(publish_date)=%d' % (now.day, now.month)])

假设您正在使用 MySQL。对于 PostgreSQL,您需要将 DAY(publish_date) 和 MONTH(publish_date) 分别更改为 DATE_PART('DAY', publish_date) 和 DATE_PART('MONTH', publish_date)。

关于python - Django 日期按月份过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664636/

相关文章:

python - 在 Django View 中执行 Python 脚本 [上传 CSV -> 批量地理编码 -> 通过脚本生成的 CSV 显示下载链接]

python - 如何检查 django 模板中的 TEMPLATE_DEBUG 标志?

python - 如何从 eclipse 执行 Robot 测试用例,它将命令行列表参数作为输入?

python - 如何在 python 中从游标中删除和返回值

python - 如何将 C++ 中的空字符序列转换为 Python 中的等效字符序列?

django - 安装numpy和pandas时如何处理heroku `Timed out compiling Python app`

python - 如何告诉 Django ORM 反转查询结果的顺序?

python - Dart - Base64 字符串不等于 python

python - 将 Pi 相机模块与 OpenCV Python 结合使用

django - 在 Django 中动态删除内联表单集