django - 在 Django 中,如何在组添加或删除用户时获得信号?

标签 django django-models django-admin

在 Django 管理员中,我有时会在(现有)组中添加或删除用户。发生这种情况时,我希望能够运行一个函数。

我只是使用标准的用户和组模型。

我已经考虑过通过 m2m_changed 用信号来做它,但它似乎需要一个 Through 类 - 我认为在这种情况下没有一个。

最佳答案

来自 django doc :

sender - The intermediate model class describing the ManyToManyField. This class is automatically created when a many-to-many field is defined; you can access it using the through attribute on the many-to-many field.



当像这样订阅 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_setinstance )。

关于django - 在 Django 中,如何在组添加或删除用户时获得信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899127/

相关文章:

python - Django 国际化 : is there a gettext alternative?

Django 时间戳不一致

python - 如何使用迁移来移动数据

python - 预期类型 'str' ,却得到 'CharField'

django-admin - Django 管理员 : want to prepopulate some fields when I click the add button (+) next to a foreign key

django - 在 Django REST Framework 中,为什么序列化程序可以正确处理模型中的字段级验证异常,但不能处理对象级验证?

django - 指定 Django 相关模型排序顺序

python - Django:如何在 list_display 中包含内联模型字段?

django - CSRF验证失败。请求已中止

django - 在 Django 管理站点中显示自定义模型验证异常