Django model manytomany field count occurrence

models.py

class Region(models.Model):
    name = models.CharField(blank=False, unique=True)
    count = models.IntegerField(blank=True, null=True) # This should be the occurrence count in ETF

class ETF(models.Model):
    ticker = models.CharField() 
    region = models.ManyToManyField(Region, blank=True)

Пример: Если в модели ETF 100 объектов ETF имеют в качестве региона США, то поле count в объекте U.S.A. в модели Region должно быть равно 100.

Как автоматически обновлять поле count в Region Model каждый раз, когда в базе данных происходят изменения? Извините, если вопрос дублируется,

Я просто не могу найти ключевые слова для поиска решения.

Вам не нужно считать количество ETF для Region, вы можете подсчитать это при необходимости с помощью .annotate(…) [Django-doc]:

from django.db.models import Count

Region.objects.annotate(
    count_etf=Count('etf')
)

У Region, возникающих из этого кверисета, будет дополнительный атрибут .count_etf, содержащий количество связанных ETF объектов для этого Region.

Если ETF связан с несколькими Region регионами, то все эти регионы будут считать его за один.

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