🍋 ⚾️ 💻 🎬 🎮

Tech/Django

[Django] 05. Form으로 Template에서 Model 수정하기

aeightchill 2025. 2. 12. 22:58
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