我正在尝试更改为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的其他尝试一样。这对保存到数据库中的最终组没有影响。
谢谢,
答案 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