[英]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.