Django의 생산성 높이기(1) - forms.py (ModelForm)

고재개발·2021년 9월 8일
0

Django

목록 보기
1/4

앞으로, 요즘 업무에 쓰고 있는 Django에 관한 내용들을 올리고자 한다.
첫 순서로 생산성 관련 내용을 정리해본다.

장고는 models.py에 Database class를 관리하는데, 이를 forms.py에서 활용하는 생산성을 올려주는 기능이 있다.
요약하면, models.py에 정의한 class를 활용해 입력 html상에 form을 쉽게 만들고, 입력받은 정보를 저장하는 것까지 쉽게 만들어 준다.

1

먼저, models.py를 살펴보자.
from django.db import models
class Blog(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

2

forms.py를 만들어, 아래와 같이 사용한다. fields에 class 항목 중 원하는 것들만 list 형태로 묶을 수 있다.
from django import forms
from .models import Blog
class BlogModelForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = '__all__'
        # fields = ['title', 'body']
        # fields 항목에는 class 항목 중 원하는 것들만 list 형태로 묶을 수 있다.

3

urls.py에서는 url_patterns에 아래와 같이 추가한다.
path('modelformcreate/', views.modelformcreate, name='modelformcreate'),

이제 views.py에서 이를 활용해보자. Method가 get일 때나 post일 때로 나누어, 입력창을 받는 화면과 내용을 저장하는 것을 구현한다. 아래 html 코드를 보면 이해가 쉬울 것이다.

from .forms import BlogModelForm
def modelformcreate(request):
    if request.method == 'POST':
        form = BlogModelForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')
    else:	# 'GET'요청일 때
        form = BlogModelForm()
    return render(request, 'form_create.html', {'form': form})

4

form_create.html 파일을 아래와 같이 작성한다. 아래처럼 table 태그로 감싸고, as_table을 활용해주면 table내의 tr, td 코드 등을 알아서 잘 작성해준다. 이 또한 생산성 향상에 큰 도움이라고 할 수 있다.
<form action="{% url 'modelformcreate' %}" method="POST">
    {% csrf_token %}
    <table>
        {{ form.as_table }}
    </table>
    <input type="submit" value="글 작성하기">
</form>
profile
고재개발

0개의 댓글