python – Django日期过滤器按日期过滤
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django日期过滤器按日期过滤,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1451字,纯文字阅读大概需要3分钟。
内容图文
![python – Django日期过滤器按日期过滤](/upload/InfoBanner/zyjiaocheng/807/0929311988b34760a4c3f0895c9ba2b9.jpg)
我需要编写一个查询,返回所有对象少于或等于特定月份的某一天.这一年并不重要.通过特定的日/月获得对象很容易(假设现在= 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日期过滤器按日期过滤全部内容,希望文章能够帮你解决python – Django日期过滤器按日期过滤所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。