У меня есть 4 модели:
class App(models.Model):
...
class AppVersion(models.Model):
app = models.ForeignKey(App)
version_code = models.IntegerField()
class Meta:
ordering = ('-version_code',)
...
class Apk(models.Model):
version = models.OneToOneField(AppVersion)
size = models.IntegerField()
class Obb(models.Model):
version = models.ForeignKey(AppVersion)
size = models.IntegerField()
AppVersion
версия всегда имеет один Apk
, но может иметь 0, 1 или 2 Obb
s
Я хочуаннотировать QuerySet общим size
из App
(что составляет Apk.size
+ сумма всех Obb.size
для данного AppVersion
).
My App
QuerySet выглядит следующим образом:
qs = App.objects.filter(is_visible=True)
и подзапрос версий:
latest_versions = Subquery(AppVersion.objects.filter(application=OuterRef(OuterRef('pk'))).values('pk')[:1])
Этот подзапрос всегда дает самый последний AppVersion
из App
.
Так какой подзапрос я должен использовать для аннотирования qs
с атрибутом size
, рассчитанным как показано выше?