我有一个模型存储不同杂志(出版物)的封面图像。
在简化版本中,它看起来像这样
class Publication(models.Model):
name = models.CharField(max_length=100)
website = models.CharField(max_length=100)
class PublicationIssue(models.Model):
publication = models.ForeignKey(Publication, null=False)
issue_number = models.IntegerField(null=False)
cover_image = models.CharField(max_length=100)
在SQL中,我可以执行以下操作:
select
publication_id,
max(issue_number) current_issue,
cover_image
from conditionalsum_publicationissue
group by publication_id
这会查找出版物的最大发行号,并轻松地向我提供当前的发行号和相关的封面图像。输出看起来像这样:
publication_id current_issue cover_image
1 12 ae43fb33.jpg
2 26 445fbb45.jpg
3 213 db8489e3.jpg
我知道我可以在Django查询中使用rawsql,但我想知道是否有解决方案可以避免这种情况。
很容易得到当前的问题:
PublicationIssue.objects. \
values('publication_id'). \
annotate(current_issue=Max('issue_number'))
这将使用current_issue返回publication_id。但就添加cover_image而言,这看起来像死路一条。
添加' cover_image'到values子句不起作用,任何进一步的注释将同样以不正确的方式扩展查询集。我试图使用子查询,但对于相对简单的SQL语句来说,这会变得相当长且复杂。
总结:我的问题是如何翻译
select
publication_id,
max(issue_number) current_issue,
cover_image
from conditionalsum_publicationissue
group by publication_id
- 挑战是cover_image字段 - 在不使用rawsql的情况下进入Django查询?