![](/img/trans.png)
[英]Why Django form choice field don't showing initial value from model as selected
[英]Django Form Choice Field Value Not Selected when Editing Instance
我有一个用于更新数据的简单表单。
所有数据都从数据库正确加载,但是我的选择字段(下拉菜单)中的当前值是唯一一个最初没有用当前值选择的值。
我的 Django 表单:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
choices = (
('', 'Select'),
('1', 'Option 1'),
('2', 'Option 2'),
)
self.fields['myfield'] = forms.ChoiceField(
required=True,
error_messages = {'required': 'Field is Required!'},
label='My Label',
choices=choices,)
...
我的目标是选择当前值。 例如,如果当前值为2
我希望在初始加载时选择Option 2
与当前表单一样,初始实例值由于某种原因未选择。
我认为您误解了初始值和实例的值。
假设您有一个myfield = '2'
的模型实例,您不需要劫持__init__()
下的表单,而只需在forms.ChoiceField
下声明choices
,它就会起作用。
看这个例子:
In [1]: from django import forms
In [2]: from django.db import models
In [3]: class MyModel(models.Model):
...: myfield = models.CharField(max_length=5, blank=True, default='')
...: class Meta:
...: app_label='test'
In [4]: class MyForm(forms.ModelForm):
...: choices = (('', 'Select'), ('1', 'Option 1'), ('2', 'Option 2'),)
...: myfield = forms.ChoiceField(choices=choices)
...: class Meta:
...: model = MyModel
...: fields = ['myfield']
...:
In [5]: a = MyModel(myfield='2')
In [6]: f = MyForm(instance=a)
In [7]: print f
<tr><th><label for="id_myfield">Myfield:</label></th><td><select id="id_myfield" name="myfield">
<option value="">Select</option>
<option value="1">Option 1</option>
<option value="2" selected="selected">Option 2</option>
</select></td></tr>
如您所见,表单字段myfield
将是Selected 。
如果实例提供的值不作为模型中定义的可接受选择包括在内,则表单将不会从模型实例继承值,而是表单将表现得与空白表单相同。
(也感谢 WayBehind 评论)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.