在自定义(非管理员)Django视图中编辑对象时,“多对多”字段中的值未被选中

时间:2011-09-06 07:40:04

标签: django django-models django-forms many-to-many

我们有一个包含多对多字段的django模型。我们使用相同的表单来添加/编辑对象。当加载现有对象进行编辑时,所有字段都具有与它们相关联的值除了多对多字段(没有选项是选择了MultipleSelectBox窗口小部件)

是否有任何特殊方法可以将值绑定到“多对多”字段,以便在表单加载对象进行编辑时,在“MultipleSelectBox”小组件中显示该字段的当前值。

我尝试阅读用户在SO上提出的类似问题,但无法找到我的查询的答案:(。

2 个答案:

答案 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