У меня есть три модели, каждая из которых имеет отношение 1: n с другой, поэтому, исходя из одной модели, я хотел бы знать общее количество всех дочерних объектов.
У меня уже есть рабочаякод (показан ниже) в функции, но я считаю, что это может быть сделано в одном запросе.
class Carton(models.Model):
id = models.CharField(max_length=15, primary_key=True)
pallet = models.ForeignKey(Pallet, null=True, blank=True, on_delete=models.SET_NULL)
# removed the other unrelated fields
class Pallet(models.Model):
id = models.CharField(max_length=15, primary_key=True)
group = models.ForeignKey(PalletGroup, on_delete=models.CASCADE)
# removed the other unrelated fields
class PalletGroup(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
# removed the other unrelated fields
# THIS IS WHAT I THINK COULD BE DONE IN A SINGLE QUERY
def total_assigned_cartons(self):
total_assigned_cartons = 0
for pallet in self.pallet_set.all():
total_assigned_cartons += pallet.carton_set.count()
return total_assigned_cartons
Я просто пытаюсь понять, если это можно сделать в одном запросе, а не итерации по всемсвязанные объекты и подсчет общего количества для каждого.