You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报错:DeclarativeFieldsMetaclass类型参数不可迭代,求解决方案

问题解决:TypeError at /primary argument of type 'DeclarativeFieldsMetaclass' is not iterable

核心错误原因

出现该报错的关键问题有两个:

  1. 表单类继承错误:你使用了forms.Form(普通表单类)却同时定义Meta类绑定模型,绑定模型的表单必须继承forms.ModelForm。
  2. CreateView配置错误:CreateView的fields参数用于指定模型字段列表,你却将自定义表单类赋值给它,正确做法是用form_class参数指定自定义表单。

分步修复代码

1. 修正forms.py

将表单父类改为forms.ModelForm,同时确保字段列表与模型匹配:

from django import forms
from .models import Primary, PrimaryAlbum, Secondary, SecondaryAlbum
from jsignature.forms import JSignatureField
from jsignature.widgets import JSignatureWidget

class PrimaryForms(forms.ModelForm):
    signature_of_student = JSignatureField(
        widget=JSignatureWidget(
            jsignature_attrs={'color':'#e0b642', 'height':'200px'}
        )
    )

    class Meta:
        model = Primary
        fields = ['admission_number', 'profile_picture', 'first_name', 
        'last_name', 'gender', 'address_of_student', 'class_Of_student', 'signature_of_student', 'year_of_graduation']
        # 注意:如果Primary模型包含year_of_graduation字段,必须加到fields列表中,否则后续get_form会报错

2. 修正views.py

将fields = PrimaryForms替换为form_class = PrimaryForms:

from .forms import PrimaryForms

class CreatePrimaryStudent(LoginRequiredMixin, CreateView):
    model = Primary
    form_class = PrimaryForms  # 此处修改
    template_name = 'create_primary_student_information.html'
    success_url = reverse_lazy('Home')

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        # 确认Primary模型存在year_of_graduation字段,否则删除该行操作
        form.fields['year_of_graduation'].queryset = PrimaryAlbum.objects.filter(user=self.request.user)
        return form

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(CreatePrimaryStudent, self).form_valid(form)

额外检查项

  • 确认Primary模型包含year_of_graduation字段,若不存在则要么在模型中添加该字段,要么删除get_form中对该字段的查询集配置。
  • 确保fields列表中的所有字段都存在于Primary模型中,避免出现字段不存在的报错。

内容的提问来源于stack exchange,提问作者Adamu Abdulkarim Dee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:15:33