来自Django 文档 https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed:
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
and instance
) 编辑组而不是用户时。