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>
# 폼에 다른 필드 추가시 위의 형식이 반복됨
반응형