Django сигналов в ManyToManyField - PullRequest
0 голосов
/ 06 февраля 2020

У меня просто следующая модель в моем проекте django. Он был создан путем добавления к атрибуту «Пользователь» (где пользователь импортируется из django .contrib.auth.models) ниже.

User.add_to_class('following',
              models.ManyToManyField('self',
                                     through=Contact,
                                     related_name='followers',
                                     symmetrical=False))

Я также добавил в класс пользователя еще один атрибут для лучшего упорядочения.

User.add_to_class('total_followers',
              models.PositiveIntegerField(db_index=True, default=0))

Я написал функцию для изменения атрибута total_followers после изменения следующего атрибута. В моем signal.py у меня есть:

from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import m2m_changed

@receiver(m2m_changed, sender=User.following.through)
def users_follow_changed(sender, instance, **kwargs):
    instance.total_followers = instance.followers.count()
    instance.save()

В оболочке я могу манипулировать атрибутом total_followers, а именно:

from django.contrib.auth.models import User

for user in User.objects.all():
    user.total_followers = user.followers.count()
    user.save()
    print(user.username)
    print(user.total_followers)

, и это возвращает правильные данные. Но когда я добавляю к какому-либо Пользователю другого подписчика, количество total_followers не меняется.

Это должно быть проблемой в моей функции users_follow_changed, но она не сообщает мне об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...