Django查询,查找自我排除未发布版本的最新版本

时间:2016-10-24 17:07:04

标签: django django-models

缩写我的代码,我有两张表:

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_publishednull的时间,然后排除其版本与未发布结果上计算的最大版本值不完全相同的结果。

0 个答案:

没有答案