2

我有一个带有 m2m-Fields 到 OtherModel 的模型。

class OtherModel(models.Model)    
    name = models.CharField(max_length=100, null=True)

class Model(models.Model)
    name = models.CharField(max_length=100, null=True)
    otherModel = models.ManyToManyField(OtherModel)

对于模型类,我使用普通的 FormSet()。对于 otherModel 类,我使用 formset_factory()

我只想允许从 OtherModel 的数据库中选择数据,所以我使用以下代码将 OtherModel 中的 CharField 名称更改为 ModelChoiceField:

def otherModel_formset(self, patientenID):

    class OtherModelForm(ModelForm):
        name= ModelChoiceField(queryset=OtherModel.objects.all())

        def __init__(self, *args, **kwargs):
            super(OtherModelForm, self).__init__(*args, **kwargs)


        class Meta:
            model = OtherModel
            fields = ['name']

    return formset_factory(form=OtherModelForm, max_num=10)

我可以将选定的名称保存在 m2m 字段中,但在重新加载时他们什么也没选择

例子:

<select id=some_id" name="some_name">
     <option value="1"> HAWAII </option>
     <option value="2"> ALASKA</option> 
</select>

在示例中 ALASKA 在提交和重新加载时被选中,应该看起来像这样:

<select id=some_id" name="some_name">
     <option value="1"> HAWAII </option>
     <option value="2" **selected="selected"**> ALASKA</option> 
</select>

但这站在 html 内容中:

<select id=some_id" name="some_name">
     <option value="1"> HAWAII </option>
     <option value="2"> ALASKA</option> 
</select>

有人知道解决方案吗?

4

3 回答 3

4

问题是使用request.POSTinitial={'name': 'ALASKA'}在一起。发生这种情况是因为 的值request.POST总是覆盖参数“initial”的值,所以我们必须把它分开。我的解决方案是使用这种方式。

views.py

if request.method == "POST":
    form=OtherModelForm(request.POST) 
else:
    form=OtherModelForm() 

forms.py

class OtherModelForm(ModelForm):
    name= ModelChoiceField(queryset=OtherModel.objects.all(), initial={'name': 'ALASKA'})

- - - - - 或者 - - - - -

views.py

if request.method == "POST":
    form=OtherModelForm(request.POST) 
else:
    form=OtherModelForm(initial={'name': 'ALASKA'}) 

forms.py

class OtherModelForm(ModelForm):
    name= ModelChoiceField(queryset=OtherModel.objects.all())
于 2014-01-29T12:26:58.987 回答
1

您的视图中应该有一些看起来类似于以下内容的东西:

form=OtherModelForm(request.POST, initial={'name': 'ALASKA'}) 
于 2013-06-18T22:14:08.933 回答
0

我有以下代码:

otherModel = OtherModel.objects.all()
otherModelFormSet = otherModel_formset(id)
otherModelList = otherModel.values('id', 'name')
inProgressOtherModel = otherModelFormSet(None, initial=otherModelList, prefix='otherModel')
于 2013-06-19T08:20:17.457 回答