如何连接三个表并根据django中的时间戳显示项目

时间:2016-07-06 11:18:00

标签: python django

朋友们,我正在开发一个网站,根据他们关注的用户向他/她定制的新闻Feed显示注册用户。我想要的是他们应该根据这些项目看到三个模型问题,答案和文档中的项目。 timestamps.All我的模型都有一个时间戳字段。我该如何实施呢?

这是我的views.py

def index(request):
    questions = Question.objects.all()
    answers = Answer.objects.all()
    docs = Document.objects.all()

    return render(request,"welcome/index.html",locals())

我在这里保持了我的观点简单。我只是想知道如何一次操作所有三个模型。

2 个答案:

答案 0 :(得分:1)

假设您在所有模型中都有一个名为created_at的字段。

第1步:合并所有3个列表。

merged_list = []
merged_list.extend(questions)
merged_list.extend(answers)
merged_list.extend(docs)

第2步:按公共字段排序。

merged_list.sort(key=lambda item: item.created_at)

(或)您可以在没有lambda

的情况下使用此类内容
from operator import attrgetter
sorted_list = sorted(merged_list, key=attrgetter('created_at'))

答案 1 :(得分:1)

您可以chain对象,并使用模型的常见timestamp字段进行排序:

from itertools import chain

def index(request):
    items = sorted(chain(Question.objects.all(),
                         Answer.objects.all(),
                         Document.objects.all()), key=lambda obj: obj.timestamp)
    return render(request, "welcome/index.html", {'items': items})