在 Django 中查询
Posted
技术标签:
【中文标题】在 Django 中查询【英文标题】:querying in django 【发布时间】:2011-07-31 11:09:56 【问题描述】:我已经在表中存储了与日期相关的数据,即同一个月可能有多个条目,但是当我检索它们时,我需要将它们作为组合结果来获取。那么无论如何我可以查询它以检索在 django(view) 中将范围设置为月份的月份的数据。
编辑:
我上一篇文章的修改。我需要做一年,我没有具体的开始日期和结束日期。无论存在多少天,我都需要设置一年中几个月的范围。我的数据库如下所示:
date count1 count2
2011/12/01, 12, 3
2011/12/03, 3, 6
现在我需要检索 12 月份的 count1。我需要一个通用查询,而不仅仅是一个特定的月份,比如 30 或 31 或 28 天。
【问题讨论】:
向我们展示您的模型以便我们提供帮助 您不应该使用编辑提出新问题。如果问题已回答,请将其标记为已回答并发布新问题。还要尝试在您的问题标题中更具体。 “在 django 中查询”不会告诉人们您正在寻找范围查询。键入特定的问题标题还可以帮助您确定您要问的问题是否以前被问过。 @kriegar 这不是一个不同的问题。我只是尝试在同一个文件中添加更多细节。 这是一个不同的问题。首先,您询问如何查询“数据”。然后你问如何得到计数。无论如何编辑我的答案以获得你想要的。 【参考方案1】:docs
假设你有一个 DateField
class MyModel(models.Model):
my_date = models.DateField()
查询:
import datetime
startdate = datetime.date(...start of some month...)
enddate = datetime.date(...end of some month...)
my_model_in_range = MyModel.objects.filter(my_date__range(startdate,enddate))
编辑:
count docs
import datetime
def first_day_of_month(month, year):
return datetime.date(year, month, 1)
def last_day_of_month(month, year):
return datetime.date(year, month+1, d.day) - datetime.timedelta(1)
# if you want query for jan 2009: month = 1, year = 2009
first = first_day_of_month(1, 2009)
last = last_day_of_month(1, 2009)
objects_in_jan_2009 = MyModel.objects.filter(my_date__range(first, last))
count = objects_in_jan_2009.count()
【讨论】:
【参考方案2】:收到您的范围后,使用以下内容查询您的模型:
YouModel.objects.filter(date__gt='initial date').filter(date__lt='final date')
日期应该是模型中的一个字段。 __gt 和 __lt 对字段应用过滤器以搜索大于和小于传递参数的值。
【讨论】:
gte 和 lte 可能更适合日期,除非您想计算之前和之后的一天。【参考方案3】:最好的方法是通过原始 sql
YourModel.objects.extra( select='values':'select sum(count) as count,extract(month from mymodel_db.date) as date group by date'【讨论】:
以上是关于在 Django 中查询的主要内容,如果未能解决你的问题,请参考以下文章
Django:从 Pandas 到 Django Rest 框架的模型查询集
django中怎么使用两个限定条件在mysql数据库中进行查询
Django Admin Cookbook-8如何在Django admin中优化查询