728x90
1️⃣ Form 만들기
만들어뒀던 앱(homepage)에서 새로운 파일을 생성한다.
📂 homepage > forms.py
from django import forms
from .models import Coffee # Model 호출
# 어떤 form을 만들지 작성해줘야 한다.
class CoffeeForm(forms.ModelForm): # ModelForm을 상속받는 Coffee Form 생성
class Meta: # form을 만들기 위해서 어떤 모델을 써야하는지 class 안에 있는 class에서 지정이 된다.
model = Coffee
fields = {"name", "price", "is_ice"} # 어떤 field를 form에서 받을 것인지를 적어주는 곳이다.
- ModelForm : 어떤 모델에 대해서 입력칸을 만들어주는 객체
- class Meta 내의 fields : 위의 입력칸을 어떤 것으로 설정한 것인지에 대해
- class Meta 내의 model : 어떤 모델에 대한 Form을 만들 것인지에 대해
📂 homepage > views.py
from .forms import CoffeeForm
def coffee_view(request):
coffee_all = Coffee.objects.all()
form = CoffeeForm()
return render(request, 'coffee.html', {"coffee_list" : coffee_all, "coffee_form":form})
2️⃣ Template에서 Form 활용하기
📂 homepage > template > coffee.html
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1> My Coffee List </h1>
{% for coffee in coffee_list %}
<p>{{ coffee.name }} , {{ coffee.price }}</p>
{% endfor %}
# form을 활용하기 위해서는 <form></form> 을 추가해줘야 한다.
<form>
# as_p -> 정확한 form의 형태로 나타내기 위해서 사용한다.
# coffee_form이 우리가 평소 봤던 그 형태로 랜더링이 된다.
{{ coffee_form.as_p }}
</form>
</body>
</html>
3️⃣ 만들어진 Form에 Button 추가
📂 homepage > template > coffee.html
<!DOCTYPE html>
<html>
<head>
<title>Coffee List</title>
</head>
<body>
<h1> My Coffee List </h1>
{% for coffee in coffee_list %}
<p>{{ coffee.name }} , {{ coffee.price }}</p>
{% endfor %}
# form을 활용하기 위해서는 <form></form> 을 추가해줘야 한다.
<form method="POST">
{{ coffee_form.as_p }}
<button type="submit">Save</button>
</form>
</body>
</html>
4️⃣ 403 Error 해결하기
.html을 수정한 후 다음과 같이 오류가 난다.
해결하기 위해 coffee.html 코드를 다음과 같이 수정해야 한다.
<!-- 기존 코드 -->
<form method="POST">
<!-- 수정 코드 -->
<form method="POST">{% csrf_token %}
5️⃣ View에서 POST 요청을 보냈을 때 어떻게 하면 모델의 정보를 넣어줄 수 있을지
📂 homepage > views.py
def coffee_view(request):
coffee_all = Coffee.objects.all()
# 만약 request가 POST라면:
# POST를 바탕으로 Form을 완성하고
# Form이 유효하면 -> 저장
if request.method == 'POST':
form = CoffeeForm(request.POST) #POST를 보내줬던 내용을 바탕으로 Form을 완성시킨 것을 form이라고 한다.
if form.is_valid(): # form안에 들어있는 값이 유효한지 check
form.save()
form = CoffeeForm()
return render(request, 'coffee.html', {"coffee_list" : coffee_all, "coffee_form":form})
form에 입력된 결과가 출력까지 잘되는 것을 확인할 수 있다.
728x90
'Tech > Django' 카테고리의 다른 글
[Django] 04. Template에서 Model 확인하기 (0) | 2025.02.12 |
---|---|
[Django] 03. Model (0) | 2025.02.12 |
[Django] 02. Template (0) | 2025.02.11 |
[Django] 01. View (0) | 2025.02.11 |
[Django] 00. Django 알아보기 (0) | 2025.02.11 |