簡體   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