개발/웹

[Django] 여러개의 form 에서 데이터 받아오기

고등어찌짐 2022. 4. 18. 21:49

 

 장고에서 하나의 html template 안에 form 이 여러개 있을 때, 각 form 의 데이터를 모두 받아오는 방법이 필요했다. 

장고 내에서는 FBV 방식으로 html 을 render 해주는 방식을 사용했고, html 코드 내의 form 은 다음 코드와 비슷하게 구현된 상태였다. 

 

<form method="post">
   {% csrf_token %}
   <button type='submit' name='form1'> Submit </button>
</form>

<form method="post">
   {% csrf_token %}
   <button type='submit' name='form2'> Submit </button>
</form>

 

처음에는 특정 버튼을 누르면 해당 form 의 데이터만 전송해야하나 생각했는데, 그렇지 않았다. 그냥 지금 form 에 입력된 데이터를 한번에 request 로 자동으로 가져올 수 있었다. views.py 내의 FBV 함수에서 request 를 열어보니 { .., 'form1' : ... , 'form2' : ... }딕셔너리 형태로 데이터가 전송되고 있었다. 그래서 request 에서 form submit 을 받은 딕셔너리의 키가 존재하는지 체크하는 방식으로 구현했다. 

 

def update_machine_view(request, brand_name_slug, mclass_slug, profile_slug):

    model = ....
    obj = 필요한 오브젝트 데이터들을 불러오는 쿼리셋 코드 
    
    if request.method == 'POST' and 'form1' in request.POST:
		form1_data = obj.filter....

    if request.method == 'POST' and 'form2' in request.POST:
		form2_data = obj.filter....

    context = {
        'form1_data': form1_data,
        'form2_data': form2_data,
    }

    return render (request, 
                   "../blahblah.html", 
                    context)

 

#참조
Multiple Django Forms in Single View: Why Does One POST Clear Other Forms?

https://stackoverflow.com/questions/59727384/multiple-django-forms-in-single-view-why-does-one-post-clear-other-forms