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 записей.

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