【发布时间】:2012-07-30 23:44:01
【问题描述】:
我正在尝试使用从外部来源提供的初始数据填充 django 模型表单。为了实现这一点,我首先从外部源中提取所有需要的数据:
url =('http://myapi.example.com')
data = urllib2.urlopen(url)
result = json.load(data)
api_data_name = result['properties']['name']
api_data_type = result['properties']['type']
然后填充一个字典,它将作为我表单的初始数据:
data = {}
for field in my_model._meta.fields:
if field.name == 'name':
data[field.name] = api_data_name
form = MyEditForm(initial=data)
然后我将表单传递给模板,初始数据正在按预期填充我的文本字段,但现在我需要能够根据从外部源收到的字符串设置选择字段的值我不知道我怎么能做到这一点,因为做了类似的事情:
if field.name == 'type':
data[field.name] = api_data_type
不会做这项工作,因为选择元素有“0”、“1”、“2”等作为选项值,而不是我从api_data_type 变量得到的长描述。
如何从我的视图中选择字段的所有选项 <option value="1">long_description</option> 中获取 long_description,以便我可以将每个选项与 api_data_type 进行比较?
这是我的 models.py 和 forms.py 的示例:
#models.py
TYPE = (
('0',_(u'Type1')),
('1',_(u'Type2')),
('2',_(u'Type3')),
)
class MyModel(models.Model):
...
type=models.CharField(max_length=30,choices=TYPE,blank=True)
...
#forms.py
class MyEditForm(forms.ModelForm):
class Meta:
model = MyModel
widgets = {
...
'type': Select(attrs={'class':'select-small span2'}),
...
}
【问题讨论】:
标签: django django-forms modelform