Python KeyError:“;键';字段名称';在'中找不到;ModelForm';。选择是:。。。,
这些字段存在于模型中,也添加到form类中,但我仍然收到以下错误: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'
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类自动渲染呢?请显示与表单一起工作的视图。