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
字段并按此排序。更加高效和简洁。问题仍然代表任何其他用例。
答案 0 :(得分:0)
也许是这样的:
Author.objects.annotate(lc=Max('article__created_at')).order_by('lc')