你如何在 Django 中修改表单中的 manytomanyfield?
How do you modify manytomanyfield in form in Django?
如何在 Django 表单中更改多对多字段的值?
最好,我想更改 Modelview
的 def 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
如何在 Django 表单中更改多对多字段的值?
最好,我想更改 Modelview
的 def 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