2013-07-08 3 views
0

Я пытаюсь получить последнее сообщение для каждой категории в моем приложении для форума. Я пробовал такие вещи, как Category.objects.order_by('catID').annotate(latestpost=Post.objects.order_by('-pub_date')[:1]) Я хочу, чтобы иметь возможность использовать значения: postID, title, user и pub_date в моем шаблоне.Получить последнее сообщение для категории

models.py:

class Category(models.Model): 
    catID = models.CharField(max_length=20, primary_key=True) 
    title = models.CharField(max_length=200) 
    description = models.CharField(max_length=200) 

class Post(models.Model): 
    postID = models.CharField(max_length=10, primary_key=True) 
    catID = models.ForeignKey(Category) 
    user = models.CharField(max_length=100) 
    title = models.CharField(max_length=200) 
    content = models.TextField() 
    pub_date = models.DateTimeField(auto_now=True) 

views.py:

def index(request): 
    cats = Category.objects.order_by('catID').annotate(latestpost=Post.objects.order_by('-pub_date')[:1]) 
    context = {'forum_cats': cats} 
    return render(request, 'forums/index.html', context) 

ответ

1

Одним из способов является

class Category(models.Model): 
    catID = models.CharField(max_length=20, primary_key=True) 
    title = models.CharField(max_length=200) 
    description = models.CharField(max_length=200) 

    def latest_post(self): 
     post = self.post_set.order_by('-pub_date') 
     if post: 
      return post[0] 
     return None 

и в шаблоне,

{% for cat in forum_cats %} 
    {% if cat.latest_post %} 
     {{cat.latest_post.title}} 
    {% endif %} 
{% endfor %} 
+0

О, ничего себе. Это действительно здорово! Спасибо :) – Jeremy

+0

Или используйте описанную здесь опцию «get_latest_by» для метаданных [здесь] (https://docs.djangoproject.com/en/dev/ref/models/options/#get-latest-by) –

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