【问题标题】:Django, get initials data from field in formset with shellDjango,使用shell从表单集中的字段中获取首字母数据
【发布时间】:2018-04-12 23:53:25
【问题描述】:

我在 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
>>> 

我必须做什么才能获取我的姓名缩写数据?

【问题讨论】:

  • 您确定 value 属性应该可用吗? hasattr(my_data_fs.forms[0].fields['my_field_1'], 'value') == False

标签: python django shell django-forms formset


【解决方案1】:

您所关注的可能是这样的: print(my_data_fs.forms[0].initial) 这样您就可以访问未绑定表单上的初始数据

查看绑定和未绑定表单上的字段有什么区别 https://docs.djangoproject.com/en/1.11/ref/forms/api/#module-django.forms

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

【讨论】:

  • Python 永远不会背叛你,所以每当你有一个 AttributeError 时,检查你正在寻找的东西是否真的存在 :),干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多