2010-04-20 2 views
0

У меня есть функция просмотра, которая должна решить, какую форму использовать в зависимости от некоторых условий. Эти две формы выглядят так:Проблема с именем класса в Django

class OpenExtraForm(forms.ModelForm): 
    class Meta: 
     model = Extra 

    def __init__(self, *args, **kwargs): 
     super(OpenExtraForm, self).__init__(*args, **kwargs) 

     self.fields['opening_challenge'].label = "lame translation" 

    def clean_opening_challenge(self): 
     challenge = self.cleaned_data['opening_challenge'] 
     if challenge is None: 
      raise forms.ValidationError('Укажите шаг, открывающий данную доп. возможность') 
     return challenge 

class HiddenExtraForm(forms.ModelForm): 
    class Meta: 
     model = Extra 
     exclude = ('opening_challenge') 

    def __init__(self, *args, **kwargs): 
     super(HiddenExtraForm, self).__init__(*args, **kwargs) 

мнение код выглядит, что:

@login_required 
def manage_extra(request, extra_id=None, hidden=False): 
    if not_admin(request.user): 
     raise Http404 
    if extra_id is None: 
     # Adding a new extra 
     extra = Extra() 
     if hidden: 
      FormClass = HiddenExtraForm 
     else: 
      FormClass = OpenExtraForm 
    else: 
     # Editing an extra 
     extra = get_object_or_404(Extra, pk=extra_id) 
     if extra.is_hidden(): 
      FromClass = HiddenExtraForm 
     else: 
      FormClass = OpenExtraForm 

    if request.POST: 
     form = FormClass(request.POST, instance=extra) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(reverse(view_extra, args=[extra.id])) 
    else: 
     form = FormClass(instance=extra) 
    return render_to_response('form.html', { 'form' : form, 
               }, context_instance=RequestContext(request)) 

Проблема в том, каким-то образом, если extra.is_hidden() возвращает Правда, заявление FromClass = HiddenExtraForm не работает. Я имею в виду, что во всех других условиях, которые используются в коде, он отлично работает: правильные классы форм интенсифицированы, и все это работает. Но если extra.is_hidden(), отладчик показывает, что условие передано, и оно переходит к следующей строке и ничего не делает! В результате я получаю ошибку UnboundLocalVar, в которой говорится, что FormClass не был полностью назначен.

Любые идеи о том, что происходит?

ответ

4

Необходимо установить между FromClass и FormClass. Вы используете FormClass везде, за исключением:

if extra.is_hidden(): 
     FromClass = HiddenExtraForm 
+1

О, боже мой, какая глупая ошибка! Я идиот. Большое спасибо за помощь! – martinthenext

+1

Нет, ты просто ослеп. После определенной работы над кодом все начинает выглядеть правильно, как бы оно ни было неправильно. Вот почему хорошо делать перерывы и заставлять других смотреть на ваш код. –

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