繁体   English   中英

Django Forms - 声明字段元 class 不可迭代

[英]Django Forms - Declarative Fields Meta class is not iterable

为什么 django 向我抛出错误TypeError at /primary argument of type DeclarativeFieldsMetaclass is not iterable

我第一次尝试使用django-forms ,在我将其添加到我的forms.py文件后,它一直向我显示错误消息: TypeError at /primary argument of type 'DeclarativeFieldsMetaclass' is not iterable ,我怎么能解决这个问题?

Forms.py

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

class PrimaryForms(forms.Form):
    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']

视图.py

from .forms import PrimaryForms

class CreatePrimaryStudent(LoginRequiredMixin, CreateView):
    model = Primary
    fields = 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)
        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)

我通过在CreatePrimaryStudent class 下的views.py文件中将其从fields = PrimaryForms更改为form_class来解决我的问题,对于forms.py文件,我将 class 方法从: class PrimaryForms(forms.Form):更改为class PrimaryForms(forms.ModelForm):

forms.py

class PrimaryForms(forms.ModelForm):
    signature_of_student = JSignatureField(
        widget=JSignatureWidget(
            jsignature_attrs={'color':'#e0b642', 'height':'200px'}
            )
            )
    
    signature_of_guardian = 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']

视图.py


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)
        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)

Django 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM