And*_*eas 2 django django-models django-forms
我有一个模型,其中包含到其他模型的 m2m-Fields。
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)
Run Code Online (Sandbox Code Playgroud)
对于模型类,我使用普通的 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)
Run Code Online (Sandbox Code Playgroud)
我可以将选定的名称保存在 m2m 字段中,但在重新加载时他们没有选择任何内容
例子:
<select id=some_id" name="some_name">
<option value="1"> HAWAII </option>
<option value="2"> ALASKA</option>
</select>
Run Code Online (Sandbox Code Playgroud)
在示例中,阿拉斯加在提交和重新加载时被选择,应如下所示:
<select id=some_id" name="some_name">
<option value="1"> HAWAII </option>
<option value="2" **selected="selected"**> ALASKA</option>
</select>
Run Code Online (Sandbox Code Playgroud)
但这是在html内容中:
<select id=some_id" name="some_name">
<option value="1"> HAWAII </option>
<option value="2"> ALASKA</option>
</select>
Run Code Online (Sandbox Code Playgroud)
有人知道解决办法吗?
小智 5
问题是使用request.POST和initial={'name': 'ALASKA'}在一起。发生这种情况是因为 的值request.POST总是覆盖参数“initial”的值,因此我们必须将其分开。我的解决方案是使用这种方式。
在views.py:
if request.method == "POST":
form=OtherModelForm(request.POST)
else:
form=OtherModelForm()
Run Code Online (Sandbox Code Playgroud)
在forms.py:
class OtherModelForm(ModelForm):
name= ModelChoiceField(queryset=OtherModel.objects.all(), initial={'name': 'ALASKA'})
Run Code Online (Sandbox Code Playgroud)
- - - - - 或者 - - - - -
在views.py:
if request.method == "POST":
form=OtherModelForm(request.POST)
else:
form=OtherModelForm(initial={'name': 'ALASKA'})
Run Code Online (Sandbox Code Playgroud)
在forms.py:
class OtherModelForm(ModelForm):
name= ModelChoiceField(queryset=OtherModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9581 次 |
| 最近记录: |