class Post(models.Model):
title = ...
category = models.ForeignKey(Category)
date = .......
class Category(models.Model):
title = ....
在主页面上,我想显示5个包含最新日期的帖子,但所有帖子必须来自不同的类别。例如,有50个类别。有可能吗?
答案 0 :(得分:6)
from django.db.models import Max
categories = Category.objects.annotate(most_recent=Max(post__date)).order_by('-most_recent')[:5]
posts = list()
for category in categories:
posts.append(category.post_set.latest())
使用最新帖子的日期作为most_recent
的值注释类别,然后您可以按顺序获取最近的5个类别。
然后,只需遍历各个类别,然后为每个类别提取最新帖子。完成。
答案 1 :(得分:1)
你打赌它是可能的。
随机选择5个类别
抓取每个类别的最新帖子
也许是这样的:
randposts = {} #list for most recent posts of 5 randomly selected categories
for randomcat in Category.objects.order_by('?')[5:]:
randposts.add(Post.objects.filter(category = randomcat).order_by('date')[0])
这可能有所帮助:https://docs.djangoproject.com/en/dev/ref/models/querysets/
答案 2 :(得分:1)
好的,让我们再试一次..
catsused = {}
posts = {}
postindex = 0
posts.add(Post.objects.order_by('date')[postindex])
catsused.add(Post.objects.order_by('date')[postindex].category
for each in range(1,5):
postindex = postindex + 1
post = Post.objects.order_by('date')[postindex]
while post.category in catsused:
postindex = postindex + 1
post = Post.objects.order_by('date')[postindex]
posts.add(post)
catsused.add(post.category)
posts ## Now contains your posts
这对我来说似乎是一个可怕的代码,但我认为接近这个代码可以完成这项工作。你想要添加一些代码来处理系统中帖子数量上的“postindex”。
答案 3 :(得分:0)
清理了Doc代码的版本:
catsused = {}
posts = {}
for post in Post.objects.order_by('date'):
if post.category not in catsused:
posts.add(post)
catsused.add(post.category)
if len(catsused) == 5:
break
答案 4 :(得分:0)