django查询:groupby并保留最近的行

bihw5rsg  于 2022-12-30  发布在  Go
关注(0)|答案(2)|浏览(123)

我在一个查询上遇到了困难,该查询应该按模型属性分组,并为该模型属性的每个唯一值返回具有最近日期的行。
我不能设法得到输出,我正在寻找的方式,将消化我的模板。
下面是我试图查询的模型:

class Building(models.Model):

    building_id = models.AutoField(primary_key=True)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    project = models.CharField(max_length=200,blank=True, null=True)

这是我的第一个尝试:获取唯一的项目并使用for循环:

projects = list(Building.objects.all().values_list('project', flat=True).distinct())
context = {}
for project in projects:
    proj = Building.objects.filter(project=project).latest("created_at")
    context[project] = proj

这是确定的,但它不允许我访问模板=〉中的{% for i in projects %}查询集,从而导致链接的pk问题
我的另一个尝试是获取行,将所有内容保存在查询集中:

projects = Building.objects.all().values_list('project', flat=True).distinct()
proj = Building.objects.filter(project__in=list(projects)).latest("created_at")

它只返回最近输入的行,而不考虑项目名称。这与我正在寻找的内容很接近,但不完全是因为我试图为每个唯一的项目值输出最近输入的行。
做那件事的正确方法是什么?

gg0vcinb

gg0vcinb1#

您可以使用:

{% for building in projects.values %}
    {{ buiding }}
{% endfor %}

或者,如果您也需要该项目:

{% for project, building in projects.items %}
    {{ buiding }}
{% endfor %}
qmelpv7a

qmelpv7a2#

您只能使用不带任何参数的latest(),并将获得表中的最新条目
尝试

proj = Building.objects.filter(project__in=list(projects)).latest()

相关问题