我们有一个包含多对多字段的django模型。我们使用相同的表单来添加/编辑对象。当加载现有对象进行编辑时,所有字段都具有与它们相关联的值除了多对多字段(没有选项是选择了MultipleSelectBox窗口小部件)
是否有任何特殊方法可以将值绑定到“多对多”字段,以便在表单加载对象进行编辑时,在“MultipleSelectBox”小组件中显示该字段的当前值。
我尝试阅读用户在SO上提出的类似问题,但无法找到我的查询的答案:(。
答案 0 :(得分:1)
有同样的问题,它是由commit=False
引起的。解决问题的方法是使用save_m2m()
# Create a form instance with POST data.
f = AuthorForm(request.POST)
# Create, but don't save the new author instance.
new_author = f.save(commit=False)
# Modify the author in some way.
new_author.some_field = 'some_value'
# Save the new instance.
new_author.save()
# Now, save the many-to-many data for the form.
f.save_m2m()
答案 1 :(得分:0)
尝试这样做! 这是我的例子向你展示你怎么做:D
class FirstModel(models.Model):
title = models.CharField(max_length = 100, unique = True)
class SecondModel(models.Model):
name = models.CharField(max_length = 100, unique = True)
first_model = models.ManyToManyField(FirstModel)
class MyForm(forms.Form):
name = forms.CharField(max_length = 100, required = True)
first_model = forms.ChoiceField(widget = forms.MultipleSelect)
将其保存在添加功能中,然后编辑它在编辑功能中,执行此操作:
def edit(request):
my_model = MyModel.objects.filter(name = 'You Unique Name').get()
first_model = my_model.first_model.all()
my_form = MyForm(initial = {'first_model': first_model})
就是这样:D