gpt4 book ai didi

django - 使用 post_save 信号分配用户权限

转载 作者:行者123 更新时间:2023-12-02 06:05:01 26 4
gpt4 key购买 nike

我有一个名为 EmailUser 的自定义用户模型我正在尝试在 post_save 上分配自定义模型权限。我在 models.py 中有以下信号

@receiver(post_save, sender=EmailUser)
def assign_permissions(sender, **kwargs):
emailUser = kwargs["instance"]
if kwargs["created"]:
permission = Permission.objects.get(name='Can view polls')
emailUser.user_permissions.add(permission)
print emailUser.user_permissions.all()

打印语句返回预期的结果:[<Permission: polls | poll | Can view polls>]但是当我在 admin 中查看用户时,权限未被选择,当我在 shell 中检查它时,权限为空。

最佳答案

我遇到了完全相同的问题,我尝试使用 post_save|pre_save|重新定义 save() 模型方法|重新定义 model_save() 方法位于 admin.py 文件中,但我没有得到预期的行为(在管理界面中看不到选定的权限)

所以我开始调查这个问题,并在 django.contrib.admin.options 文件、ModelAdmin 类、_changeform_view 方法中找到了下一个代码:

self.save_model(request, new_object, form, not add)
self.save_related(request, form, formsets, not add)

因此首先通过save_model保存实例,然后通过save_lated重写权限

所以我只是在我的UserAdmin类中重新定义了changeform_view

我重新定义的代码 list 是下一个:

def changeform_view(self, request, object_id=None, form_url='', extra_context=None):

to_field = request.POST.get(TO_FIELD_VAR, request.GET.get(TO_FIELD_VAR))
obj = self.get_object(request, unquote(object_id), to_field)
user = get_object_or_404(User, id=obj.id)
if user.is_lab_director:
permission = Permission.objects.get(name='Can change job')
user.user_permissions.add(permission)
else:
user.user_permissions.clear()

with transaction.atomic(using=router.db_for_write(self.model)):
return self._changeform_view(request, object_id, form_url, extra_context)

我希望这可以帮助别人解决这样的问题

关于django - 使用 post_save 信号分配用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com