我的django应用程序具有下一个结构:
class A(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
time = models.DateTimeField(auto_now_add=True)
我想在数据库中选择每个名称的最早时间,例如:
╔═════╤══════╤════════════╗
║ id │ name │ time ║
╠═════╪══════╪════════════╣
║ 1 │ a │ 2018-09-10 ║
║ 2 │ a │ 2018-09-11 ║
║ 3 │ b │ 2018-09-10 ║
║ 4 │ b │ 2018-09-11 ║
╚═════╧══════╧════════════╝
那么结果应该是:
╔═════╤══════╤════════════╗
║ id │ name │ time ║
╠═════╪══════╪════════════╣
║ 1 │ a │ 2018-09-10 ║
║ 3 │ b │ 2018-09-10 ║
╚═════╧══════╧════════════╝
我知道raw-sql是一种解决方案,但是可以使用Django查询表达式吗?我正在使用django 1.8。 请帮忙。
答案 0 :(得分:2)
我们可以这样做:
from django.db.models import Min
A.objects.values('name').annotate(
min_time=Min('time')
).order_by('name')
这将导致包含字典的QuerySet
对象:在这种情况下,它看起来像:
<QuerySet [{'name': 'a', 'min_time': date(2018,09,10)},
{'name': 'b', 'min_time': date(2018,09,10)}]>
因此您可以遍历查询集,从而处理字典元素。