缩写我的代码,我有两张表:
Article:
title = ...
ArticleVersion:
article = ForeignKey(Article)
version = IntegerField
datetime_published = DatetimeField(null=True)
如果ArticleVersion
字段为datetime_published
,则null
未发布。
我需要为所有ArticleVersion 对象找到 max已发布版本。
到目前为止,我对任何已发布状态的ArticleVersion
个对象都有效:
ArticleVersion.objects \
.select_related('article') \
.annotate(max_version=Max('article__articleversion__version')) \
.filter(version=F('max_version'))
但是我很难将该关系article__articleversion__version
过滤到仅具有非空ArticleVersion
值的datetime_published
个对象。
.exclude(datetime_published=None)
不起作用,查询中的.exclude(article__articleversion__datetime_published=None)
也不起作用。
如果可能的话,我宁愿不使用原始SQL并将其保留在单个查询中。
有任何帮助吗?
编辑:如果不清楚,问题是article__articleversion__version
正在使用未发布的 max ArticleVersion.version
值进行注释。排除datetime_published
为null
的时间,然后排除其版本与未发布结果上计算的最大版本值不完全相同的结果。