Django multiple queryset combine into a pagination
我已经将来自不同模型的两个查询集组合成一个列表,并使用分页显示为一个列表。
问题是列表中的对象是根据创建它们的模型通过分页显示的。
。
如何修复列表,以便从模型创建新对象时。它将在最近创建的对象之后显示,即使最近创建的对象来自不同的模型。
例如。我有一个用户白板和用户评论的联合查询集。如果最近创建了一个新的白板对象,我将创建另一个注释。注释将在白板的对象后以分页方式显示,而不是与所有其他注释一起显示,因为它在不同的模型中
氧化镁
我希望你能了解我正在努力实现的目标:)
模块的组成部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class WhiteBoard(models.Model): user = models.ForeignKey(User) name = models.CharField(max_length=100) created = models.DateTimeField(auto_now_add=True) picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True) def __unicode__(self): return self.name class Comment(models.Model): created = models.DateTimeField(auto_now_add=True) user = models.ForeignKey(User) body = models.TextField() picture = models.ForeignKey(Picture) |
视图.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @login_required def archive(request): user = User.objects.get(username=request.user) person = Person.objects.get(user=user) users = User.objects.filter(pk__in=person.following.all().values_list('user__pk',flat=True)) picture = whiteboard .objects.filter(user__in=users).order_by("-created") comment = Comment.objects.filter(user__in=users).order_by("-created") posts= list(chain(picture,comment)) paginator = Paginator(posts, 5) try: page = int(request.GET.get("page", '1')) except ValueError: page = 1 try: posts = paginator.page(page) except (InvalidPage, EmptyPage): posts = paginator.page(paginator.num_pages) return render(request,'archive.html',{'picture':picture,'comment':comment,'posts':posts}) |
号
存档.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | {% for post in posts.object_list %} {{post.name }} {{post.body}} {% endfor %} <!-- Next/Prev page links --> {% if posts.object_list and posts.paginator.num_pages > 1 %} <span class="step-links"> {% if posts.has_previous %} newer entries << {% endif %} <span class="current"> Page {{ posts.number }} of {{ posts.paginator.num_pages }} </span> {% if posts.has_next %} >> older entries {% endif %} </span> {% endif %} |
您只需按照它们共享的
1 2 3 4 5 6 7 8 9 10 | from itertools import chain ... posts = list( sorted( chain(picture,comment), key=lambda objects: objects.created, reverse=True # Optional )) paginator = Paginator(posts, 5) ... |
这是一个类似的问题