Поле модели 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.

Вернуться на верх