你如何在 Django 中修改表单中的 manytomanyfield?

How do you modify manytomanyfield in form in Django?

如何在 Django 表单中更改多对多字段的值?

最好,我想更改 Modelviewdef form_valid 内的值。在我看来,这是 form_valid 的一部分,我遇到了麻烦:

lesson = Lesson.objects.all().first()

for i in lesson.weekday.all():
    form.instance.weekday.add(i)
    form.instance.save()

这里,weekday是一个多对多字段。但是,表单会保存用户 weekday"submitted" 值,而不是上面代码中所示的更改后的值。有趣的是,下面的代码有效,尽管它不是多对多字段:

form.instance.name = lesson.name
form.instance.save()

我怀疑您在调用 super 方法之前 运行ning 代码。 super 方法中的代码可以如下所示:

def form_valid(self, form):
    self.object = form.save()
    return super(ModelFormMixin, self).form_valid(form)

form.save() 运行s清除所有ManyToMany相关值并设置表单值。

可能您在调用超级方法后需要运行您的代码:

def form_valid(self, form):
    # some code here...
    return_value = super(MyView, self).form_valid(form)
    lesson = Lesson.objects.all().first()
    for i in lesson.weekday.all():
        self.object.weekday.add(i)
        # self.object.save() # Dont need call save here

    return return_value