Django - динамическое обновление поля модели count при добавлении или удалении связанных объектов
Я пытался исследовать это самостоятельно, но не смог разобраться, поэтому надеюсь, что кто-нибудь сможет подсказать мне направление.
У меня есть следующие 2 модели:
class Group(models.Model):
short_name = models.CharField(max_length=10, primary_key=True) # company acronym
full_name = models.CharField(max_length=200)
learner_count = models.PositiveIntegerField(default=0)
contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
startDate = models.DateField()
endDate = models.DateField()
notes = models.TextField(blank=True, null=True)
class Learner(models.Model):
...
group = models.ForeignKey(Group, on_delete=models.CASCADE)
Можно ли динамически обновлять поле learner_count в Group по мере добавления или удаления учащихся из группы?
Я бы посоветовал вообще не хранить счетчик Learner
. Вам не нужно его хранить. Таким образом, модель выглядит так:
class Group(models.Model):
short_name = models.CharField(
max_length=10, primary_key=True
) # company acronym
full_name = models.CharField(max_length=200)
# learner_count = models.PositiveIntegerField(default=0)
contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
startDate = models.DateField()
endDate = models.DateField()
notes = models.TextField(blank=True, null=True)
При необходимости вы можете определить его с помощью:
from django.db.models import Count
Group.objects.annotate(learner_count=Count('learner'))
Возникающие при этом Group
объекты Queryset
будут иметь дополнительный атрибут .learner_count
с количеством связанных Learner
записей.