Из django doc :
sender - Промежуточный класс модели, описывающий ManyToManyField.Этот класс создается автоматически при определении поля «многие ко многим»;Вы можете получить к нему доступ, используя атрибут through в поле «многие ко многим».
При подписке на m2m_changed, например, так:
@receiver(m2m_changed)
def my_receiver(**kwargs):
from pprint import pprint
pprint(kwargs)
Вы получите несколько сигналов, например:это (сокращенно):
{'sender': <class 'django.contrib.auth.models.User_groups'>,
'action': 'post_add',
'instance': <User: bouke>,
'model': <class 'django.contrib.auth.models.Group'>,
'pk_set': set([1]),
'reverse': False,
'signal': <django.dispatch.dispatcher.Signal object at 0x101840210>,
'using': 'default'}
Таким образом, пользователь bouke
был добавлен в pk_set
группы: [1]
.Однако я отметил, что макет администратора очищает все группы, а затем добавляет выбранные группы обратно. Полученные вами сигналы: pre_clear
, post_clear
, pre_add
, post_add
.Используя комбинацию этих сигналов, вы можете сохранить группы до и после записи.При выполнении сравнения этих списков у вас есть удаленные и добавленные группы для пользователя.
Обратите внимание, что сигналы противоположны (pk_set
и instance
) при редактировании группы вместо пользователя..