У меня просто следующая модель в моем проекте 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, но она не сообщает мне об ошибке.