-1

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

谢谢,

4

1 回答 1

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
于 2013-11-12T21:53:47.793 回答