Skip to main content
 首页 » 编程设计

python之Django,使用shell从表单集中的字段中获取首字母数据

2025年01月19日58dudu

我在 Django 1.11 中使用 formset,并在模板渲染中完成所有工作。 现在我想在 python shell 中测试表单集。 所以我做了一个简单的表单,然后是一个带有首字母数据的表单集 (2):

>>> from django import forms 
>>> class my_formset(forms.Form): 
...    my_field_1=forms.IntegerField() 
...    my_field_2=forms.IntegerField() 
...  
 
>>> values=[{'my_field_1':10,'my_field_2':15}, {'my_field_1':84,'my_field_2':6}] 
 
>>> values 
   [{'my_field_2': 15, 'my_field_1': 10}, {'my_field_2': 6, 'my_field_1': 84}] 

构建表单集:

>>> from django.forms import formset_factory 
>>> formset=formset_factory(my_formset,extra=0) 
>>> my_data_fs=formset(initial=values) 

结果表单集:

 >>> my_data_fs 
 <django.forms.formsets.my_formsetFormSet object at 0x7fdb688dda90> 
 >>> my_data_fs.forms 
 [<my_formset bound=False, valid=Unknown, fields=(my_field_1;my_field_2)>,   <my_formset bound=False, valid=Unknown, fields=(my_field_1;my_field_2)>] 

现在我想获取缩写数据:

>>> my_data_fs.forms[0] 
<my_formset bound=False, valid=Unknown, fields=(my_field_1;my_field_2)> 
>>> my_data_fs.forms[0].fields 
OrderedDict([('my_field_1', <django.forms.fields.IntegerField object at 0x7fdb688dd7b8>), ('my_field_2', <django.forms.fields.IntegerField object at 0x7fdb688dd710>)]) 

但是如果我看到单个字段,我会得到这个:

>>> my_data_fs.forms[0].fields['my_field_1'] 
<django.forms.fields.IntegerField object at 0x7fdb688dd7b8> 
>>> my_data_fs.forms[0].fields['my_field_1'].value 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
AttributeError: 'IntegerField' object has no attribute 'value' 

如果我使用首字母,我会得到空响应

>>> my_data_fs.forms[0].fields['my_field_1'].initial 
>>>  

我需要做什么才能获取我的姓名首字母数据?

请您参考如下方法:

你正在寻找的可能是这样的: 打印(my_data_fs.forms[0].initial) 这样您就可以访问未绑定(bind)表单上的初始数据

检查绑定(bind)和未绑定(bind)表单上的字段之间的区别 https://docs.djangoproject.com/en/1.11/ref/forms/api/#module-django.forms

从文档中可以清楚地看出,为了访问数据 打印(bound_form ['subject'].data) 表单必须用 data 关键字初始化,换句话说,有界,但如果您只想访问初始数据,您仍然可以像我在第一个代码示例中那样在未绑定(bind)的表单上进行初始化。