修改管理员组M2M字段

时间:2013-11-12 15:31:45

标签: python django

我正在尝试更改为Django中的给定用户保存的组列表。我重写了UserAdmin类来执行此操作,并且我的save_form()方法被正确触发。从那里我试图覆盖form.cleaned_data [' groups']或使用form.data.setlist(' groups',...)中的值。但是,我所做的任何修改都不会保存到数据库中。而是保存了请求用户设置的项目,我的代码没有任何影响(尽管它已运行。)

我的问题是:我是否在表单中修改了正确的值?为什么这些词典对保存到数据库的结果没有影响?有一个form.instance变量,用于保存正在修改的用户。我想知道在运行form.save(commit = False)之后是否可以使用它来重置组,但是我想看看是否有一种干净的方法来覆盖save_form中的M2M字段。

这是我刚刚做的另一个尝试,因为我已经注意到form_save()的返回是正在修改的User实例:

def save_form(self, request, form, change):
    f_save = form.save(commit=False)
    f_save.groups = new_queryset # here i'm just overriding the queryset for the groups.
    f_save.save()
    return f_save

就像使用form.cleaned_data和form.data的其他尝试一样。这对保存到数据库中的最终组没有影响。

谢谢,

1 个答案:

答案 0 :(得分:0)

在可以使用多个到多个字段之前,需要提交实例。根据文件:

You can’t associate it with a Publication until it’s been saved:

然后您不需要在实例上调用.save,因为它根本不会更改该记录。它只是将记录添加到直通表中。

你能看看这是否有效吗?

def save_form(self, request, form, change):
    f_save = form.save()
    f_save.groups = new_queryset
    return f_save