I’m trying to use a form I have defined in forms.py within my CreateView, as I have css classes and field labels I want to apply.
Documentation states declaring a form_class field within your CreateView, but trying to set it as my ModelForm gives me the error TypeError ‘AssessmentForm’ object is not callable
class AssessmentCreateView(LoginRequiredMixin, generic.CreateView): model = Assessment form_class = AssessmentForm() ...
What is the proper implementation of setting a ClassBasedView to use a ModelForm?
Advertisement
Answer
The reason you are getting this error is that you are calling this AssessmentForm()
. So instead of using this
form_class = AssessmentForm()
use this:
form_class = AssessmentForm
And if you deep dive into CreateView
you came to know that this class
is using FormMixin
that has a method name get_form
, with the implementation something like this.
def get_form(self, form_class=None): """Return an instance of the form to be used in this view.""" if form_class is None: form_class = self.get_form_class() return form_class(**self.get_form_kwargs())
and get_form_class()
simply returns your self.form_class
, something like this.
def get_form_class(self): """Return the form class to use.""" return self.form_class