파이썬으로 장고(Django) 공략하기: 입문 강의를 정리한 내용입니다.

게시글 등록

  • Model Form을 이용해 음식점 등록 화면을 만들어보자.
  • form.py에 Restaurant의 폼 클래스를 작성한다.
# third/forms.py
from django.forms import ModelForm
from . models import Restaurant
from django.utils.translation import gettext_lazy as _

class RestaurantForm(ModelForm):
    class Meta:
        model = Restaurant
        fields = ['name', 'address']
        labels = {
            'name': _('이름'),
            'address': _('주소'),
        }
        help_texts = {
            'name': _('이름을 입력해주세요.'),
            'address': _('주소를 입력해주세요.'),
        }
        error_messages = {
            'name': {
                'mex_length': _('이름은 30자 이하로 정해주세요.')
            }
        }
  • 등록 폼을 생성하고 처리하는 view 메소드를 추가한다.
  • view 메소드에 url을 연결한다.
# third/views.py
from . forms import RestaurantForm
from django.http import HttpResponseRedirect

def create(request):
    if request.method == "POST":
        form = RestaurantForm(request.POST)
        if form.is_valid():
            new_item = form.save()
        return HttpResponseRedirect('/third/list/')
    form = RestaurantForm()
    return render(request, 'third/create.html', {'form': form})
# third/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('list/', views.list, name="list"),
    path('create/', views.create, name="restaurant-create"),
]
  • 등록화면 템플릿을 추가한다.
<!-- third/templates/third/create.html -->
{% extends 'third/base.html' %}
{% load static %}
{% block content %}
<div class="container">
    <form action="{% url 'restaurant-create' %}" method="post">
        {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>
        <button type="submit">등록</button>
    </form>
</div>
{% endblock %}