在列表视图中显示多个查询集 [英] Display Multiple Queryset in List View
本文介绍了在列表视图中显示多个查询集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试显示具有多个模型的多个查询集作为时间轴,并按时间对em进行排序,而不是在另一个查询集之后显示我的当前代码:
i'm trying to display multiple queryset with multiple models as a timeline and sort em by time instead of displaying one queryset after the other my current code looks like that :
<div class="user-info col-md-8">
{% for obj in user.marks_set.all %}
<p>{{ obj.module }}</p>
<p>{{ obj.grade }}</p>
<p>{{ obj.date }}</p>
{% endfor %}
{% for obj in events %}
{{ obj.content }}
{% endfor %}
</div>
所有模型都有日期字段,我试图显示所有内容并按日期排序,而不是显示所有标记以及所有事件之后
all models have date field , i'm trying to display everything and order em by date instead of displaying all marks and after that all events
推荐答案
我使用itertools链和attrgetter的方式
the way i did it was using itertools chain and attrgetter
from itertools import chain
from operator import attrgetter
class MyListView(ListView):
template_name = 'list.html'
def get_queryset(self):
qs1 = Events.objects.all() #your first qs
qs2 = Marks.objects.all() #your second qs
#you can add as many qs as you want
queryset = sorted(chain(qs1,qs2),key=attrgetter('timestamp'),)
return queryset
从此帖子中得到了答案合并来自不同模型的2个Django查询集
got the answer from this post Combine 2 Django Querysets from Different Models
#models.py
class Events(models.Model):
...
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True,)
class Marks(models.Model):
...
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True,)
#templates
{% for item in queryset %}
{% if item.anyfieldusniquetoqs1 %}
#here goes all qs1 field you want to display
{% else %}
#here goes all qs2 field you want to display
{% endfor %}
这篇关于在列表视图中显示多个查询集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文