覆盖 Django 的 get_form_class() 方法抛出字符串错误
Overriding Django's get_form_class() method throws string error
我有一个基于 class 的视图,它应该动态 select 一个基于动物名称的表单。
UpdateAnimalView(FormMixin, DetailView):
def get_form_class(self):
SOME_FORMS = {
"Dog" : "UpdateDogForm",
"Cat" : "UpdateCatForm",
"Frog" : "UpdateFrogForm",
}
animal = object
animal_type = object.type #returns "Dog", "Cat" or "Frog"
form_class_name = SOME_FORMS[animal_type]
#form_class_name now takes the values "UpdateDogForm"
#, "UpdateCatForm" or "UpdateFrogFrom"
return form_class_name
然而,当我 运行 这个时,它似乎没有读取 form_class
而是作为 string
而 Django 抛出这个错误:
'str' object is not callable
回溯来自 get_context_data
。我推断调用堆栈如下:
def get_form(self, form_class=None):
form = super(UpdateAnimalView, self).get_form()
return form
def get_context_data(self, **kwargs):
context = super(UpdateAnimalView, self).get_context_data(**kwargs)
context['form'] = self.get_form()
return context
如何 return form_class
作为其正确的数据类型而不是字符串?
get_form_class
应该 return 实际的 class,而不是它的名称:
# import the form classes from wherever they live
from .forms import UpdateDogForm, UpdateCatForm, UpdateFrogForm
...
SOME_FORMS = {
"Dog": UpdateDogForm, # <- no string values here!
"Cat": UpdateCatForm, # <-
"Frog": UpdateFrogForm, # <-
}
我有一个基于 class 的视图,它应该动态 select 一个基于动物名称的表单。
UpdateAnimalView(FormMixin, DetailView):
def get_form_class(self):
SOME_FORMS = {
"Dog" : "UpdateDogForm",
"Cat" : "UpdateCatForm",
"Frog" : "UpdateFrogForm",
}
animal = object
animal_type = object.type #returns "Dog", "Cat" or "Frog"
form_class_name = SOME_FORMS[animal_type]
#form_class_name now takes the values "UpdateDogForm"
#, "UpdateCatForm" or "UpdateFrogFrom"
return form_class_name
然而,当我 运行 这个时,它似乎没有读取 form_class
而是作为 string
而 Django 抛出这个错误:
'str' object is not callable
回溯来自 get_context_data
。我推断调用堆栈如下:
def get_form(self, form_class=None):
form = super(UpdateAnimalView, self).get_form()
return form
def get_context_data(self, **kwargs):
context = super(UpdateAnimalView, self).get_context_data(**kwargs)
context['form'] = self.get_form()
return context
如何 return form_class
作为其正确的数据类型而不是字符串?
get_form_class
应该 return 实际的 class,而不是它的名称:
# import the form classes from wherever they live
from .forms import UpdateDogForm, UpdateCatForm, UpdateFrogForm
...
SOME_FORMS = {
"Dog": UpdateDogForm, # <- no string values here!
"Cat": UpdateCatForm, # <-
"Frog": UpdateFrogForm, # <-
}