编辑实例时未选择 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将被选中

如果实例提供的值未作为模型中定义的可接受选项包含在内,则表单将不会从模型实例继承值,而是表单的行为与空白表单相同。

(也感谢WayBehind的评论)

最新更新