我有一个名为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()
print语句返回预期的:[<Permission: polls | poll | Can view polls>]
但当我在admin中查看用户时,未选择权限,当我在shell中检查时,权限为空。
答案 0 :(得分:0)
我遇到了完全相同的问题,我尝试使用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_related
重写权限
所以我刚刚在我的changeform_view
类中重新定义了UserAdmin
下一个是我重新定义的代码清单:
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)
我希望这可以帮助某人解决此类问题