python - 覆盖 Django 的 get_form_class() 方法抛出字符串错误

标签 python django django-class-based-views

我有一个基于类的 View ,它应该根据动物的名称动态选择一个表单。

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' 对象不可调用

回溯来自 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

如何将 form_class 作为其正确的数据类型而不是字符串返回?

最佳答案

get_form_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, # <-
}

关于python - 覆盖 Django 的 get_form_class() 方法抛出字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37511232/

相关文章:

python - Django ModelForm 可以显示存储值的自定义表示吗?

python - 在 Django 类基础 View 中创建自定义方法

python - 在 OrderedDict Python 中交换值和键

python - Pandas - 创建一个带有 "dummy variable"的表

Python heapq 模块,对象上的 heapify 方法

Python3,与列表重新匹配

django - 如何在不注销的情况下清除所有 session 变量

python - Django,类 View : How can I save session data with a form's object?

python - Django:基于类的 View 注销用户(如果不是员工)

python - 为什么这些代码段之一工作而另一个抛出溢出