我有一个模型可以存储不同杂志(出版物)的封面图片。
在简化版本中,它看起来像这样
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而言,这看起来像是一条死胡同。
在 values 子句中添加 'cover_image' 不起作用,任何进一步的注释都会以不符合我的目的的方式扩展查询集。我曾尝试使用子查询,但对于相对简单的 SQL 语句来说,这变得相当长且复杂。
总结:我的问题是如何翻译
select
publication_id,
max(issue_number) current_issue,
cover_image
from conditionalsum_publicationissue
group by publication_id
- 挑战是cover_image 字段 - 在不使用rawsql 的情况下进入Django 查询?