django:在模型管理器中按外键排序

时间:2015-11-16 23:15:48

标签: python django

class Author(models.Model):
    name = models.CharField()

class Article(models.Model):
    author = models.ForeignKey(Author)
    created_at = models.DateTimeField(auto_now_add=True)

Author的自定义模型管理器中,如何根据最近Article的创建日期对所有作者进行排序?这可能不使用原始sql或for循环吗?

为了展示研究工作并澄清问题,这里是我在原始Python中如何做到这一点的(伪)代码。由于if not article.author in sorted_authors条件,它未经测试,可能无效。

from django.db import models
from .models import Article

class AuthorsManager(models.Manager):
    def get_sorted_authors(self):

        articles = Article.objects.all().order_by('creation_date')

        sorted_authors = []
        for article in articles:
            # not sure if this if condition would work
            if not article.author in sorted_authors:
                sorted_authors.append(article.author)

        return sorted_authors

另一种可能的解决方案:向last_article_datetime添加Author字段并按此排序。更加高效和简洁。问题仍然代表任何其他用例。

1 个答案:

答案 0 :(得分:0)

也许是这样的:

Author.objects.annotate(lc=Max('article__created_at')).order_by('lc')