2011-09-02 3 views
0

폼이 잘 작동하는 체크 박스가있는 폼을 가지고 있습니다. 내보기에서 request.POST.getlist ('list')를 사용하여 값 목록을 검색 할 수 있습니다.django 1.3 형식을 사용하여 getlist를 검색하는 클린 메서드

지금은 깨끗한 메서드 내부에서 몇 가지 양식 유효성 검사를 시도하고 내가 self.cleaned_data [ 'list']를 사용하려고하면 마지막 값을 얻습니다. 항목 목록을 가져올 수 없습니다.

내가 어떻게 할 수 있는지 알기 원하십니까?

class SelectList_Form(forms.Form): 
    list = forms.CharField(required=False) 


    def clean(self): 
     super(SelectList_Form, self).clean() 
     cleaned_data = self.cleaned_data 

     try: 
      # TODO: list validation 
      if cleaned_data['list'].__len__() is 0: 
       raise forms.ValidationError(_('Must select at least one of the lists below'),) 

      if cleaned_data['list'].__len__() > 1: 
       try: 
        # In here when i print list it only shows me the last value. It doesn't show me the list of values when the box is checked 
        print cleaned_data['list'] 



       except Main.DoesNotExist: 
        raise Http404 

     except forms.ValidationError: 
      raise 

class Posting_Wizard(FormWizard): 

    def render_template(self, request, form, previous_fields, step, context=None): 
     if step == 0: 
      obj = MainI18n.objects.filter(main__is_active=True, language=request.LANGUAGE_CODE).\ 
        exclude(main__parent=None).order_by('main__parent').select_related(depth=1) 
      category_choices=dict(['%s,%s' % (i.main.slug, i.main.parent.slug), '%s - %s' % (i.main.parent,i.label)] for i in obj) 

      form.fields['categories'] = forms.CharField(widget=forms.RadioSelect(choices=category_choices.items())) 


    if step == 1: 
     category = request.POST.get('0-categories') 

     pobj = Main.objects.filter(slug=category.split(',')[1], parent=None).get() 
     cobj = Main.objects.filter(slug=category.split(',')[0], parent=pobj.id).get() 
     lobj = ListI18n.objects.filter(list__is_active=True, language=request.LANGUAGE_CODE, list__main__slug=category.split(',')[0], list__main__parent=pobj.id).select_related() 

     list_choices = dict([i.id, i.title] for i in lobj) 

     if cobj.mainproperties.relation == 'M': 
      # Here i generate the checkboxes 
      form.fields['list']=forms.CharField(widget=forms.CheckboxSelectMultiple(choices=list_choices.items()),label="Pick the list",) 
     else: 
      form.fields['list']=forms.CharField(widget=forms.RadioSelect(choices=list_choices.items()),label="Pick the list",) 


    return super(Posting_Wizard, self).render_template(request, form, previous_fields, step, context) 


def done(self, request, form_list): 
    return HttpResponseRedirect(reverse('accounts-registration-wizard-done')) 

def get_template(self, step): 
    return 'listing/post/wizard/wizard_%s.html' % step 
+0

몇 가지 코드를 보여주십시오. –

+0

방금 ​​코드를 추가했는데 lff()를 사용하여 팁을 주셔서 감사합니다. –

답변

0

먼저 forms.py, 여기에 기본 파이썬 오류가 있습니다. 이중 밑줄 기능에 액세스 할 필요는 거의 없습니다. 내부 구현 세부 사항입니다. 항상 대신 len() 함수를 사용하십시오. 비교를 위해 is을 절대 사용하지 마십시오. 신원 확인 용이므로 신원이 동일한 것으로 알고 있어야합니다. 이는 기본적으로 None을 의미합니다. 그래서 코드를 읽어야합니다 혹시 list 하나 이상의 '요소'가있을 수 있다고 생각하는 이유

if len(cleaned_data['list']) == 0: 

지금, 둘째, 내가 이해가 안 돼요. CharField로 정의했습니다. CharField는 많은 문자가 포함 된 단일 필드입니다. len은 필드 수가 아닌 해당 필드에 입력 된 문자 수를 테스트하고 있지만 사용자가 정의한 것으로 생각됩니다.

+0

이 코드가 성장함에 따라 적절한 표준을 유지하는 데 도움이 될 것입니다. 목록에 관해서는 Posting_Wizard 클래스에서 form.fields [ 'list'] = forms.CharField (widget = forms.Chec ... 등)라는 필드를 수정하는 것을 볼 수 있습니다. 수정 된 필드는 확인란을 선택합니다. 액세스 할 수 없지만 request.POST.getlist ('list')에서 액세스 할 수 있습니다. –

관련 문제