Django 渲染时捕获AttributeError:';德米尔菲尔德';对象没有属性';属性';
从这以后。我有以下资料: models.pyDjango 渲染时捕获AttributeError:';德米尔菲尔德';对象没有属性';属性';,django,django-forms,Django,Django Forms,从这以后。我有以下资料: models.py VARIABLE_CHOICES = ( ('bool', 'On/Off'), ('date', 'Date'), ('float', 'Number'), ('text', 'Text'), ) class Variable(models.Model): template = models.ForeignKey(Template) name = models.CharField(max_lengt
VARIABLE_CHOICES = (
('bool', 'On/Off'),
('date', 'Date'),
('float', 'Number'),
('text', 'Text'),
)
class Variable(models.Model):
template = models.ForeignKey(Template)
name = models.CharField(max_length=20)
type = models.CharField(max_length=5, choices=VARIABLE_CHOICES, default=2)
data = models.CharField(max_length=100, blank=True, null=True)
forms.py
class VariableForm(ModelForm):
def __init__(self, *args, **kwargs):
super(VariableForm, self).__init__(*args, **kwargs)
if self.instance:
if self.instance.type == 'bool':
self.fields['data'].widget = BooleanField()
if self.instance.type == 'date':
self.fields['data'].widget = DateField()
if self.instance.type == 'float':
self.fields['data'].widget = DecimalField()
if self.instance.type == 'text':
self.fields['data'].widget = TextInput()
self.fields['data'].label = self.instance.name
views.py
def template_variables_view(request,tID):
...
templateVariables = Variable.objects.filter(template=template)
lvForm = []
for ltVars in templateVariables:
lvForm.append(VariableForm(instance=ltVars))
我在lvForm中循环浏览表单,就像在模板中一样:
{% for lo in ltvForm %}
{% for field in lo %}
<td>{{ field.label }}:</td><td>{{ field }}</td>
{% endfor %}
{% endfor %}
{%for ltvForm%中的lo}
{lo%中的字段为%1}
{{field.label}}:{{field}
{%endfor%}
{%endfor%}
但在渲染时,我不断收到错误捕获的AttributeError:“DecimalField”对象没有属性“attrs”
有什么想法吗?出于某种原因,您正在将数据字段的小部件设置为字段。您应该只设置字段
if self.instance.type == 'bool':
self.fields['data'] = BooleanField()
等等。出于某种原因,您正在将数据字段的小部件设置为字段。您应该只设置字段
if self.instance.type == 'bool':
self.fields['data'] = BooleanField()
等等。+1结尾的文本输入除外@七个地球上有字段和小部件。。注意哪个是哪个。但是,如果要更改整个字段,请记住这将撤消字段的标签、必填或非必填状态、帮助文本等内容。如有必要,必须在新字段上重新声明这些内容,例如
BooleanField(label='Data Item',required=False,help_text='在此处添加一些数据')
。而且我似乎还需要使用lvForm.append(VariableForm(instance=ltVars,auto_id=ltVars.id+'%s'))重新执行id'(因为它们都是相同的)
+1,除了最后的文本输入@七个地球上有字段和小部件。。注意哪个是哪个。但是,如果要更改整个字段,请记住这将撤消字段的标签、必填或非必填状态、帮助文本等内容。如有必要,必须在新字段上重新声明这些内容,例如BooleanField(label='Data Item',required=False,help_text='在此处添加一些数据')
。而且我似乎还需要使用lvForm.append(VariableForm(instance=ltVars,auto_id=ltVars.id+'%s'))重新执行id'(因为它们都是相同的)