Django ORM: Как GROUP BY поле, которое "живет" в нижней части рекурсивной модели?
Допустим, у меня есть следующие модели:
class Unit(models.Model):
name = models.CharField(...)
class PackageDescription(models.Model):
lower_level = models.ForeignKey("self", null=True, ...)
unit = models.OneToOneField(Unit, null=True, ...)
class StockItem(models.Model):
package_description = models.OneToOneField(PackageDescription, ...)
Я хочу узнать количество имен единиц в данном StockItem
кверисете (qs
). Если бы у нас не было этой рекурсивной природы, мы могли бы просто сделать что-то вроде:
qs.values("package_description__unit__name").annotate(count=Count("package_description__unit__name"))
Однако, PackageDescription
может иметь несколько уровней, а Unit
"живет" в нижней части структуры. Как бы я мог узнать, в пределах уровня DB, самый нижний уровень? И более того: как я могу GROUP BY
такое поле?
NOTE: Я использую PostgreSQL.