我有一个名为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存在,但我只想检索the last version个研究.以下是三次失败的try :
Attempt 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')))
)
此try 检索所有研究,而不是上一个版本中的研究.
Attempt 2:个
cgds_studies = cgds_studies.filter(
version=Max(CGDSStudy.objects.filter(url=OuterRef('url')).values('version'))
)
此try 会引发错误"cgdsstudy.version" must appear in the GROUP BY clause or be used in an aggregate function
.
Attempt 3:个
cgds_studies = cgds_studies.filter(
version=CGDSStudy.objects.filter(url=OuterRef('url')).annotate(max_version=Max('version')).values('max_version')[0]
)
此try 会引发错误This queryset contains a reference to an outer query and may only be used in a subquery.
.