我' 2个简单的模型,如下:
class Obj(models.Model):
...
和
class Objdata(models.Model):
obj = models.ForeignKey(Obj)
...
datum = models.DateTimeField()
。我的目标是根据所属的Objdata'选择所有Objs。最新的基准条目。
也许它'对于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)]
答案 0 :(得分:2)
如果我正确理解您的代码,您只想获取所有Objs,按其最新的Objdata.datum排序。你可以通过聚合来做到这一点:
from django.db.models import Max
objs = Obj.objects.annotate(latest_data=Max('objdata__datum')).order_by('latest_data')
答案 1 :(得分:0)
如果我理解你正确的尝试:
objdates = Objdate.objects.order_by('obj_id', '-dateum').distinct('obj_id').select_related('obj')
objs = [objdate.obj for objdate in objdates]
答案 2 :(得分:0)
作为替代方案,如果你认为Django的模型查询太多或不足以实现你想要的,或者你更喜欢SQL(但是在sql方面它'查询它并不是那么复杂),你可以使用原始 READ MORE HERE:
Obj.objects.raw('SELECT ... your SQL statement here;')
这将返回模型实例,您也可以使用连接 READ HERE直接执行自定义SQL。