我有一个带有m2m-Fields的Model到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)
对于类Model I,使用普通的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字段中保存所选名称,但在重新加载时他们没有选择
exampel:
<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>
有人知道解决方案吗?
答案 0 :(得分:4)
问题在于使用request.POST
和initial={'name': 'ALASKA'}
。发生这种情况是因为request.POST
的值总是覆盖参数&#34; initial&#34;的值,因此我们必须将它分开。我的解决方案是使用这种方式。
在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())
答案 1 :(得分:1)
您的视图中应该包含以下内容:
form=OtherModelForm(request.POST, initial={'name': 'ALASKA'})
答案 2 :(得分:0)
我有以下代码:
otherModel = OtherModel.objects.all()
otherModelFormSet = otherModel_formset(id)
otherModelList = otherModel.values('id', 'name')
inProgressOtherModel = otherModelFormSet(None, initial=otherModelList, prefix='otherModel')