我正在尝试使用从外部源提供的初始数据填充 django modelform。为了实现这一点,我首先从外部源中提取所有需要的数据:
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'}),
...
}