Поле модели Django для подсчета другого поля
У меня есть эти модели:
class HatchingBatch(models.Model):
hatch_date = models.DateField()
incubator = models.CharField(max_length=32)
rhode_island_red = models.IntegerField(default=0)
barred_plymouth_rock = models.IntegerField(default=0)
black_australorp = models.IntegerField(default=0)
class Reservations(models.Model):
date = models.DateField()
hatch = models.ForeignKey(HatchingBatch, related_name="reservation", on_delete=models.CASCADE)
is_done = models.BooleanField()
is_delivery = models.BooleanField()
shipping_fee = models.IntegerField()
amount = models.IntegerField()
class Stocks(models.Model):
hatch = models.OneToOneField(HatchingBatch, on_delete=models.CASCADE, related_name="stock")
Я хочу добавить поле в модель Stocks, которое будет количеством зарезервированных цыплят (это легко сделать через ForeignKey), однако, я также хочу добавить поле "sold", которое будет соответствовать сумме резервирования с "is_done" : True
Вы можете .annotate(…)
[Django-doc] с:
from django.db.models import Count, Q
Stocks.objects.annotate(
reservations=Count('hatch__reservation'),
sold=Count('hatch__reservation', filter=Q(hatch__reservation__is_done=True))
)
Объекты Stocks
, возникающие в результате этого QuerySet
будут иметь дополнительные атрибуты .reservations
и .sold
.