Languages/Python

[파이썬/django] 폼 (Form)

MOONCO 2021. 3. 23. 19:32

django의 폼의 필요성

django의 폼은, 사용자에게 정보를 수정하는 화면을 직접 보여줄때 사용한다.

(ex 로그인, 회원가입, 글 생성, 글 수정 )

 

HTML 폼의 필요성

html의 폼은, 사용자에게 정보를 입력받아, 작업과정을 볼 필요없이 완료된 결과만 필요할 때 사용한다

정보를 수정하는 화면을 만들때도 사용할 수 있지만, django의 폼보다 불편하다.

 

폼만들기 (<앱>/forms.py)

# MycorpForm이라는 폼을 생성

class MycorpForm(forms.ModelForm):

    class Meta:
    
        # Mycorp 모델과 연결 (DB)
        
        model = Mycorp
        
        # 모델에서 stock_count 가져오기
        
        fields = ('stock_count',)
        



 

폼사용 (<앱>/views.py)

# 생성한 폼 가져오기

from .form import MycorpForm

# 폼 사용하여, DB와 연결된 페이지 만들기

@login_required
def myport(request, pk):
    corp = get_object_or_404(Mycorp, pk=pk)
    if request.method == "POST":
        form = MycorpForm(request.POST ,instance=corp)
        if form.is_valid():
            corp = form.save(commit=False)
            corp.author = request.user
            corp.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = MycorpForm(instance=post)
        
    # 템플릿으로 폼 전달하기
    
    return render(request, "<앱>/myport.html",{"corps":corps, "form":form})

 

전달된 폼 사용하기 (myport.html)

{% extends '<앱>/base.html' %}
{% block content %}
    {% for corp in corps %}  
        <div class="corp">
            <h1>{{corp.stock_name}}</h1>
            <p>{{corp.stock_code}}</p>
            <a href="{% url 'port_remove' pk=corp.pk %}" class="btn btn-default">삭제</a>
            
            # 화면에 폼 출력하기
            
            <form method="post" class="post-form">
                {% csrf_token %}
                {{form.as_p}}
                <button type="submit" class="save btn btn-default">Save</button>
            </form>

        </div>
    {% empty %}
        <p>회사가 추가되지 않았습니다.</p>        
    {% endfor %}
{% endblock %}

 

실제로 전달 되는 폼

# 필드명 : stock_count

# 필드명으로 라벨을 만들어 제목을 만들어주고, 요청을 받을 input 텍스트 창을 만들어준다.

<tr>
    <th>
        <label for="id_stock_count">Stock count :</label>
    </th>
    <td>
        <input type="text" name="stock_count" maxlength="200" id="id_stock_count">
    </td>
</tr>

# 폼에 다른 필드 추가시 위의 형식이 반복됨
반응형