1

我有一个模型可以存储不同杂志(出版物)的封面图片。

在简化版本中,它看起来像这样

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 查询?

4

0 回答 0