0

我在我的 UserAdmin 中定义了一个 save_model 来更改用户的对象级别权限。

class UserAdmin(BaseUserAdmin):

    def save_model(self, request, obj, form, change):

        obj.save()
        allprojects = Project.objects.all()
        projects = obj.workingproject.all()
        remove_perm("view_project", obj, allprojects)
        assign_perm("view_project", obj, projects)
        obj.save()

remove_perm 和 assign_perm 是 django-guardian 的快捷方式,workingproject 是用户的 M2M 字段。

问题:选择不同的项目并保存权限时不会更改,但是第二次按“保存”按钮可以根据需要进行更改。我究竟做错了什么?

4

1 回答 1

0

通过覆盖试试这个save_related

def save_related(self, request, form, formsets, change):
    super(UserAdmin, self).save_related(request, form, formsets, change)
    obj = form.instance
    allprojects = Project.objects.all()
    projects = obj.workingproject.all()
    remove_perm("view_project", obj, allprojects)
    assign_perm("view_project", obj, projects)

save_related中,Django 正在删除已经存在的 M2M 并设置新的。所以变化在做save_model并且save不会反映。

于 2018-01-19T09:26:31.510 回答