【问题标题】:Django queryset return the newest of field choicesDjango 查询集返回最新的字段选择
【发布时间】:2021-06-03 18:28:25
【问题描述】:

我希望返回一个查询集,该查询集由字段 name 的每个选择的最新(日期)对象组成。我可以通过迭代一个有序的查询集,然后使用 exclude() 逐步删除旧对象来做到这一点。我想知道这是否可以使用 latest() 来完成。我不知道如何使用 name 的每个唯一值运行最新的。

我对 django 没有太多经验,我担心下面的工作代码会很慢/很贵。它按名称对狗进行分组,然后按日期排序,然后系统地删除较旧的日期。

class Dog(models.Model):
    # names = husky, poodle, lab, etc
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    datemade = models.DateField(default=date.today) 

views.py
ad = Dog.objects.all().order_by('name', 'datemade')
    n=0
    while n < (len(ad)-1):
        if ad[n].name==ad[n+1].name and ad[n].datemade<=ad[n+1].datemade:
            ad = ad.exclude(id=ad[n].id)
            print(ad)
            n=n-1
        n=n+1

【问题讨论】:

    标签: django


    【解决方案1】:

    Dog.objects.all().order_by('name', '-datemade').distinct('name').

    请注意,它仅适用于 postgresql。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 2013-10-23
      • 2018-06-02
      • 2011-10-26
      • 1970-01-01
      • 2016-09-10
      • 2011-07-03
      • 2016-04-01
      相关资源
      最近更新 更多