django 模型中每个类别的最新条目

Posted

技术标签:

【中文标题】django 模型中每个类别的最新条目【英文标题】:Recent entries from each category in django model 【发布时间】:2017-01-17 08:36:59 【问题描述】:

我需要在模板中显示每个类别的最新条目是 Instarama、Facebook、Twitter。这是我的解决方案,但它不起作用。

我的 get_queryset 方法不起作用:

def get_queryset(self):
    return super(OnlineManager, self).get_queryset().filter(is_online=True).order_by('-date').annotate(Count('social_channel'))[:1]

这是我的模型:

class Social(models.Model):
    social_channel = models.CharField(max_length=25, choices=SOCIAL_CHANNELS,
                                      default=SOCIAL_CHANNELS[0][0], blank=True)
    text = models.TextField(max_length=5000, blank=True, default='')
    is_online = models.BooleanField(default=True)
    position = models.PositiveIntegerField(default=0)
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.social_channel

    class Meta:
        ordering = ['position']

【问题讨论】:

什么不起作用? @arcegk 我收到所有帖子或一个帖子,但我需要每个社交频道的最后一个帖子 你试过循环吗? @cycle?这是什么? forloop for i in .... 【参考方案1】:
def get_queryset(self):
    super(OnlineManager, self).get_queryset().filter(is_online=True).order_by('- id')annotate(Count('social_channel'))[‌​0]

【讨论】:

解释一下就好了。【参考方案2】:

试试这个:

def get_queryset(self):
    query = super(OnlineManager, self).get_queryset()
    query = query.filter(is_online=True).order_by('social_channel', '-id').distinct('social_channel')
    return query

它应该返回每个 social_chanel 的最新条目

【讨论】:

以上是关于django 模型中每个类别的最新条目的主要内容,如果未能解决你的问题,请参考以下文章

Django:列出页面中每个类别的产品

Django列出包含某些相同项目的类别中的项目

Django,自定义标签...怎么样?

Django ORM。检索每个类别的10个项目

Laravel-8 一对多/多一关系

Wordpress 类别模板 - 具有多个类别的条目