gpt4 book ai didi

django - 根据对象的 date_created 属性对来自不同模型的查询集对象列表进行排序

转载 作者:行者123 更新时间:2023-12-02 04:57:04 24 4
gpt4 key购买 nike

我有不同的模型,所有模型都有一个名为“date_created”的“DateTimeField”。我需要从所有模型中选择所有对象,按“创建日期”字段对它们进行排序并作为列表返回。

我尝试了以下方法:

模型.py

class FirstModel(models.Model):
title = models.CharField(max_length=100)
date_created = models.DateTimeField()


class SecondModel(models.Model):
title = models.CharField(max_length=100)
date_created = models.DateTimeField()

View .py

def browse(request):
object_list = []
for model in get_models(get_app('myapp')):
object_list.append(model.objects.order_by('-date_created').all())
object_list = sorted(object_list, key=attrgetter('date_created'))
context = {'data': object_list}
return render(request, 'myapp/browse.html', context)

我收到错误“QuerySet”对象没有属性“date_created”。

这些模型还有其他与本题无关的字段。我可以使用一个公共(public)基类将所有对象放在一起(我想),但出于某种原因我正在使用一个抽象基类。我怀疑可以使用“连接”,但我不知道该怎么做。

那么,我如何根据 date_created 属性对这个 object_list(这是来自不同模型的对象列表)进行排序?

最佳答案

我通过更多研究找到了答案。

问题出在这一行:

object_list.append(model.objects.order_by('-date_created').all())

虽然我使用“追加”,但它被视为普通列表而不是查询集对象列表 { 我对此有点不确定,基本上这一行给了我一个列表列表,我只需要一个列表所有查询集对象。 } 更正此 chain() from itertools 可以通过导入链并替换上面的行来使用,如下所示:

from itertools import chain
...
...
object_list = chain(object_list, (model.objects.order_by('-date_created').all()))
...

休息一切都很好。此外,正如其在问题中指出的那样,multi table inheritence可以使用它可以通过使用 order_by

在单个查询中对所有结果进行排序

关于django - 根据对象的 date_created 属性对来自不同模型的查询集对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com