我有两个简单的模型,像这样:

class Obj(models.Model):
    ...


class Objdata(models.Model):
    obj = models.ForeignKey(Obj)
    ...
    datum = models.DateTimeField()

. 我的目标是根据所属的Objdata的最新数据条目选择所有obj。
也许对django来说已经太复杂了,但是在sql方面,查询它并没有那么复杂。
那么,有没有一个Django的方法来实现这一点,或者怎样才是最好的呢实施它。我的解决方案目前有点复杂。
一个小的伪代码可能有助于实现我想要的目标:
lst = []
for elem in Obj.objects.filter():
    try:
        lst.append((elem.objdata_set.all().order_by('-datum')[0].datum, elem))
    except:
        lst.append((elem.datum, elem))
res = [e[1] for e in sorted(lst, reverse = True)]

最佳答案

如果我正确地理解了您的代码,您只需要得到所有obj,按照它们的最新Objdata.datum排序。你可以通过聚合来做到这一点:

from django.db.models import Max
objs = Obj.objects.annotate(latest_data=Max('objdata__datum')).order_by('latest_data')

关于python - 通过外键进行Django订单查询(反向),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27771166/

10-10 00:56