【发布时间】:2020-04-22 13:08:12
【问题描述】:
我有这个模型(隐藏了不相关的字段):
class Blog(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
is_published = models.BooleanField(default=False)
published_date = models.DateTimeField(null=True, default=None, blank=True)
我只想获取每个作者的最新帖子,按发布日期排序。
在我看来,我尝试了以下方法:
blog_list = Blog.objects.filter(is_published=True).order_by('author', '-published_date').distinct('author')
哪个有效除了这会按作者的顺序对所有博客文章进行排序,而不是按发布日期。
以下实际上可以通过切换顺序来解决问题,但这会在 django 中引发错误:
blog_list = Blog.objects.filter(is_published=True).order_by('-published_date', 'author').distinct('author')
我已经检查了与此问题类似的所有问题,但没有遇到可行的解决方案。我认为这个请求应该很简单,但我看不出有什么方法可以实现。
【问题讨论】:
-
这看起来涉及 2 个模型,我见过类似的问题,但不适用于我的问题。不过我会检查一下并进行测试。
-
试试这个 from django.db.models import Max Blog.objects.filter(pk__in=Blog.objects.order_by('-published_date').values('auther_id').annotate( max_id=Max ('pk')).values('max_id'), is_publish=true)
-
@GorkhaliKhadka 这看起来几乎成功了!我确实看到了一些独特的作者帖子。但是我遇到了一些问题,例如:并非所有作者都出现了,并且博客文章未按发布日期排序
-
你的问题解决了吗?
-
@GorkhaliKhadka 谢谢,是的,我发布的答案已解决,但两天内我无法选择最佳答案。我会尝试其他解决方案,看看他们是否做得更好。
标签: django filter sql-order-by django-queryset distinct