我有一个名为CGDSStudy
的Django模型,其中包含字段name
、url
和version
:
class CGDSStudy(models.Model):
name = models.CharField(max_length=300)
url = models.CharField(max_length=300)
version = models.PositiveSmallIntegerField(default=1)
同一检查的多个版本可以存在于同一URL中,但我只想检索最后一个版本的检查。以下是三次失败的尝试:
尝试1:
from django.db.models import Max, OuterRef, Exists
cgds_studies = CGDSStudy.objects.all()
cgds_studies = cgds_studies.filter(
Exists(CGDSStudy.objects.annotate(max_version=Max('version')).filter(url=OuterRef('url'), max_version=OuterRef('version')))
)
此尝试检索所有检查,而不是上一版本的检查。
尝试2:
cgds_studies = cgds_studies.filter(
version=Max(CGDSStudy.objects.filter(url=OuterRef('url')).values('version'))
)
此尝试引发错误"cgdsstudy.version" must appear in the GROUP BY clause or be used in an aggregate function
。
尝试3:
cgds_studies = cgds_studies.filter(
version=CGDSStudy.objects.filter(url=OuterRef('url')).annotate(max_version=Max('version')).values('max_version')[0]
)
此尝试引发错误This queryset contains a reference to an outer query and may only be used in a subquery.
。
1条答案
按热度按时间2hh7jdfx1#
你可以使用**
Subquery
**表达式[Django-doc]: