xpa*_*nta 4 mysql django django-orm
我在django上遇到了如何从上周(不是7天前)检索数据的问题.使用date.isocalendar()[1]会很棒.但是有些stackoverflow浏览导致我没有令人满意的结果.
无论如何,我可以做到没有可移植性并使用mysql的INTERVAL功能.这是我想用django的ORM进行的查询.
SELECT id, user_id, CAST(timestamp AS Date), WEEK(timestamp,3), WEEK(CURDATE(), 3) FROM main_userstats WHERE week(timestamp, 3) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK ), 3)
我怎样才能使用extradjango中的函数(如果不可能以任何其他更简单的方式进行)?
mho*_*ost 22
我假设您要查找的是属于上周同一日历周的所有条目.
这应该做的伎俩:
class Entry(models.Model):
pub_date = models.DateField([...])
Run Code Online (Sandbox Code Playgroud)
获取对象:
from datetime import timedelta
from django.utils import timezone
some_day_last_week = timezone.now().date() - timedelta(days=7)
monday_of_last_week = some_day_last_week - timedelta(days=(some_day_last_week.isocalendar()[2] - 1))
monday_of_this_week = monday_of_last_week + timedelta(days=7)
Entry.objects.filter(created_at__gte=monday_of_last_week, created_at__lt=monday_of_this_week)
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了7天来获取本周的星期一而不是添加6天来获取上周的星期日,并且我使用created_at__lt = monday_of_this_week(而不是__lte =).我这样做是因为如果你的pub_date是一个DateTimeField,它将不包括星期日对象,因为当使用now().date()时,时间是00:00:00.
这可以很容易地调整为将星期日视为一周的第一天,但isocalendar()认为它是最后一天,所以我选择了它.
如果使用Django <1.4,请使用以下命令:
from datetime import date, timedelta
some_day_last_week = date.today() - timedelta(days=7)
Run Code Online (Sandbox Code Playgroud)
代替:
from datetime import timedelta
from django.utils import timezone
some_day_last_week = timezone.now().date() - timedelta(days=7)
Run Code Online (Sandbox Code Playgroud)
看看Django ORM 的过滤方法.
基本示例:
class Entry(models.Model):
pub_date = models.DateField([...])
Entry.objects.filter(pub_date__year=2006)
Run Code Online (Sandbox Code Playgroud)
但您可以使用过滤器执行更复杂的查询:
Entry.objects.filter(pub_date__gte=datetime.now())
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以使用datetime其他python库来定义特定日期.查看字段查找的文档,了解您拥有哪些可能性.
在你的情况下,你可以做这样的事情(受此Stackoverflow帖子的启发):
from datetime import date, timedelta
d=date.today()-timedelta(days=7)
Entry.objects.filter(pub_date__gte=d)
Run Code Online (Sandbox Code Playgroud)
我不是100%确定这个查找是否有效,但这是正确的方向.
| 归档时间: |
|
| 查看次数: |
10248 次 |
| 最近记录: |