2016-05-29 2 views
0

У меня есть представление на основе класса, которое должно динамически выбирать форму, основанную на имени животного.Переопределение метода get_form_class() Django throws string error

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 

Как я могу вернуть form_class в качестве правильного типа данных, а не в виде строки?

ответ

3

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, # <- 
} 
+0

Wow это явно любителем ошибка. Спасибо за отладку. – bryansis2010

Смежные вопросы