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

时间:2018-01-19 08:53:01

标签: django python-3.x django-admin django-guardian

我在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字段。

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

1 个答案:

答案 0 :(得分:0)

通过覆盖Mitter-Regular

来尝试此操作
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) 中,Django正在移除已存在的M2M并设置新的M2M。因此,save_relatedsave_model中所做的更改不会反映出来。