2016-09-09 2 views
3

Мне нужно показать в шаблоне последние записи из каждой категории - Instarama, Facebook, Twitter. Здесь мое решение, но оно не работает.Последние записи из каждой категории в модели django

Мой метод 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'] 
+0

Что не работает? – arcegk

+0

@arcegk Я получаю все сообщения или один, но мне нужно последнее сообщение на социальный канал –

+0

вы пробовали цикл? – arcegk

ответ

1
def get_queryset(self): 
    super(OnlineManager, self).get_queryset().filter(is_online=True).order_by('- id')annotate(Count('social_channel'))[‌​0] 
+1

Объяснение будет приятным. – IanS

0

Попробуйте это:

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

Смежные вопросы