2014-12-24 1 views
1

저는 사용자가 입법부의 메일 링리스트를 작성할 수있는 Django 1.6 프로젝트를 진행하고 있습니다. 따라서 사용자는 페이지로 이동하여 목록에서 원하는 입법자 옆에있는 몇 가지 확인란을 클릭하고 양식에서 해당 메일 링리스트를 컴파일합니다.Django는 동적 필드로 양식을 작성합니다.

내 문제 : 내 양식의 필드는 동적입니다. 저는 양식이로드 될 때마다 RESTful API에서 새로운 입법자 목록을 가져오고 있습니다. 나는 폼 필드를 미리 지정하고 싶지 않기 때문에 장고의 폼 클래스를 사용하지 않는다. 내보기는 다음과 같습니다

def klissRequest(url): 
    with urllib.request.urlopen(url) as query: 
     response = json.loads(query.read().decode()) 
    return response['content'] 

def newList(request): 
    # Create list of all legislators 
    allLegislators = klissRequest('http://www.kslegislature.org/li/api/v6/rev-1/members/') 

    masterlist = [] 
    kpids = [] 

    for i in allLegislators.keys(): 
     for j in allLegislators[i]: 
      masterlist.append(j) 
      kpids.append(j['KPID']) 

    # Create committee lists - House, Senate, and Joint 
    masterComs = klissRequest('http://www.kslegislature.org//li/api/v5/rev-1/ctte/') 
    senateComs = [] 
    houseComs = [] 
    specialComs = [] 

    for i in masterComs['house_committees']: 
     houseComs.append(i) 
    for i in masterComs['senate_committees']: 
     senateComs.append(i) 
    for i in masterComs['special_committees']: 
     specialComs.append(i) 

    return render(request, 'newList.html', {'kpids':kpids, 'masterlist':masterlist, 'senateComs':senateComs, 'houseComs':houseComs, 'specialComs':specialComs}) 

각각의 목록은 다음과 같이 표시됩니다

<div> Individual Legislators </div> 
    <ul> 
     <div> 
      {% for i in masterlist %} 
      <li><input type="checkbox" name="selected[]" value="{{i.NAME}}" /><label for="{{i.NAME}}">{{i.NAME}}</label></li> 
      {% endfor %} 
     </div> 
    </ul> 
    </div> 

을 일반적으로, 나는 장고 데이터를 확인하고 양식을 처리하는 클래스를 형성 사용할 수 있습니다. 내가 원하는 것은 검사 된 모든 상자의 목록을 조합하는 것입니다. 장고에서 이것을 처리 할 수있는 방법이 있습니까? 아니면 필드를 미리 지정하지 않고 양식을 처리하는 방법이 있습니까?

+1

당신이 본 적 있어요? http://stackoverflow.com/a/2234212/2535531 – DRC

답변

1

이 답변이 예와

https://twigstechtips.blogspot.com/2011/10/django-dynamic-forms-with-dynamic.html

:

https://stackoverflow.com/a/5478634/1338790

이 블로그 게시물에 대한 링크

class ExampleDynamicForm(forms.Form): 
    normal_field = forms.CharField() 
    choice_field = forms.CharField(widget = forms.Select(choices = [ ('a', 'A'), ('b', 'B'), ('c', 'C') ])) 

    def __init__(self, user, *args, **kwargs): 
    # This should be done before any references to self.fields 
    super(ExampleDynamicForm, self).__init__(*args, **kwargs) 

    self.user = user 
    self.id_list = [] 

    # Some generic loop condition to create the fields 
    for blah in Blah.objects.for_user(user = self.user): 
     self.id_list.append(blah.id) 

     # Create and add the field to the form 
     field = forms.ChoiceField(label = blah.title, widget = forms.widgets.RadioSelect(), choices = [('accept', 'Accept'), ('decline', 'Decline')]) 
     self.fields["blah_%s" % blah.id] = field 

    # Change the field options 
    self.fields['choice_field'].widget.choices = [ ('d', 'D'), ('e', 'E'), ('f', 'F') ] 


# to use the form: 
form = ExampleDynamicForm(request.user) 
관련 문제