Django 渲染时捕获AttributeError:';德米尔菲尔德';对象没有属性';属性';

Django 渲染时捕获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

从这以后。我有以下资料:

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_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'(因为它们都是相同的)