簡體   English   中英

django 查詢:groupby 並保留最新的行

[英]django query: groupby and keep rows that are the most recent

我正在努力處理一個查詢,該查詢應該按 model 屬性分組並返回該 model 屬性的每個唯一值,即具有最新日期的行。

我無法以一種易於我的模板消化的方式獲得我正在尋找的 output。

這是我要查詢的 model:

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)

這是我的嘗試 #1:獲取獨特的項目並使用 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")

無論項目名稱如何,它只返回最新輸入的行。 這接近我正在尋找的東西,但不是很接近,因為我嘗試 output 每個唯一項目值的最新輸入行。

這樣做的正確方法是什么?

您可以使用:

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

或者如果您也需要該項目:

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

您只能使用不帶任何參數的 latest() 並將獲得表中的最新條目

嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM