save_model中的代码在第二次保存时执行,而不是第一次保存时执行



我在用户管理员中定义了一个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的快捷方式,Workproject是用户的M2M领域。

问题:选择不同的项目并保存权限时不会更改,但再次按保存按钮会根据需要进行更改。我做错了什么?

通过覆盖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并设置新的M2M。因此,save_modelsave的变化不会反映出来。

最新更新