Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python KeyError:“;键';字段名称';在'中找不到;ModelForm';。选择是:。。。,_Python_Django_Django Models - Fatal编程技术网

Python KeyError:“;键';字段名称';在'中找不到;ModelForm';。选择是:。。。,

Python KeyError:“;键';字段名称';在'中找不到;ModelForm';。选择是:。。。,,python,django,django-models,Python,Django,Django Models,这些字段存在于模型中,也添加到form类中,但我仍然收到以下错误:KeyError:“在“BudgetForm”中找不到键“budget\u documents”。选项包括:address 型号.py class Budget(TimeStampedModel): title = models.CharField(max_length=100) budget_documents = models.FileField(verbose_name='Budget Documents'

这些字段存在于模型中,也添加到form类中,但我仍然收到以下错误:
KeyError:“在“BudgetForm”中找不到键“budget\u documents”。选项包括:address

型号.py


class Budget(TimeStampedModel):
    title = models.CharField(max_length=100)
    budget_documents = models.FileField(verbose_name='Budget Documents',
                                 upload_to='BIN/%Y/%m/%d/', null=True, blank=False),
    amount = models.BigIntegerField()
    allocation_date = models.DateField()
    expire_date = models.DateField()
    project = models.ForeignKey(Project, on_delete=models.PROTECT, related_name='budget')
    address = models.ForeignKey(Address, on_delete=models.PROTECT, blank=True, null=True, related_name='budget')
    creator = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE
    )

    def __str__(self): return self.title

    class Meta:
        managed = True

class BudgetForm(forms.ModelForm):
    class Meta:
        model = Budget
        exclude = ('creator',)

    def __init__(self, *args, **kwargs):
        super(BudgetForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.layout = Layout(
            Row(
                Column('title', css_class='col-md-6 mb-0'),
                Column('budget_documents', css_class='col-md-6 mb-0'),
            ),
            Row(
                Column('amount', css_class='col-md-6 mb-0'),
                Column('allocation_date', css_class='col-md-6 mb-0'),
            ),
            Row(
                Column('expire_date', css_class='col-md-6 mb-0'),
                Column('project', css_class='col-md-6 mb-0'),
            ),
        )

forms.py


class Budget(TimeStampedModel):
    title = models.CharField(max_length=100)
    budget_documents = models.FileField(verbose_name='Budget Documents',
                                 upload_to='BIN/%Y/%m/%d/', null=True, blank=False),
    amount = models.BigIntegerField()
    allocation_date = models.DateField()
    expire_date = models.DateField()
    project = models.ForeignKey(Project, on_delete=models.PROTECT, related_name='budget')
    address = models.ForeignKey(Address, on_delete=models.PROTECT, blank=True, null=True, related_name='budget')
    creator = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE
    )

    def __str__(self): return self.title

    class Meta:
        managed = True

class BudgetForm(forms.ModelForm):
    class Meta:
        model = Budget
        exclude = ('creator',)

    def __init__(self, *args, **kwargs):
        super(BudgetForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.layout = Layout(
            Row(
                Column('title', css_class='col-md-6 mb-0'),
                Column('budget_documents', css_class='col-md-6 mb-0'),
            ),
            Row(
                Column('amount', css_class='col-md-6 mb-0'),
                Column('allocation_date', css_class='col-md-6 mb-0'),
            ),
            Row(
                Column('expire_date', css_class='col-md-6 mb-0'),
                Column('project', css_class='col-md-6 mb-0'),
            ),
        )

一切似乎都很好,但为什么我会犯这个错误

2020-09-22 17:58:14,387 WARNING Could not resolve form field 'budget_documents'.
Traceback (most recent call last):
  File "/home/riajul/PycharmProjects/bms/venv/lib/python3.8/site-packages/django/forms/forms.py", line 155, in __getitem__
    field = self.fields[name]
KeyError: 'budget_documents'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/riajul/PycharmProjects/bms/venv/lib/python3.8/site-packages/crispy_forms/utils.py", line 70, in render_field
    bound_field = form[field]
  File "/home/riajul/PycharmProjects/bms/venv/lib/python3.8/site-packages/django/forms/forms.py", line 157, in __getitem__
    raise KeyError(
KeyError: "Key 'budget_documents' not found in 'BudgetForm'. Choices are: address, allocation_date, amount, expire_date, project, title."

您可以尝试将字段直接添加到表单中:


class BudgetForm(forms.ModelForm):
    budget_documents = forms.FileField(**options)
    class Meta:
        model = Budget
        exclude = ('creator',)
...


这是可行的,但为什么不从ModelForm类自动渲染呢?请显示与表单一起工作的视图。