在列表视图中显示多个查询集 [英] Display Multiple Queryset in List View

查看:50
本文介绍了在列表视图中显示多个查询集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试显示具有多个模型的多个查询集作为时间轴,并按时间对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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆