Today I Learned/django

장고 generic editing views , createView

하나719 2023. 8. 4. 15:35
반응형

 

https://docs.djangoproject.com/en/4.2/ref/class-based-views/generic-editing/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

장고 공식 페이지 참고

 

CreateView

장고 제네릭의 edit 뷰 중 하나로 데이터를 입력하는 폼을 아주 간단하게 만들 수 있다.

to do list 를 추가하는 폼을 예시로 만들어보자

 

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Task(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length= 200)
    description = models.TextField(null= True, blank=True )
    complete = models.BooleanField(default = False)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['complete','created']

views.py

from django.views.generic.edit import CreateView
from .models import Task
from django.urls import reverse_lazy

class TaskCreate(CreateView):
    model = Task
    fields = ['title','description', 'complete']
    # 아이템 생성 성공 시, 리스트 화면으로 이동
    success_url = reverse_lazy('tasks')

 

createView를 만들때 참고할 모델을 지정해주고, 해당 모델의 어떤 컬럼을 필드로 사용할지 설정해준다.

그리고 폼 제출에 성공했을 때 돌아갈 url을 설정해준다. 

 

urls.py

from django.urls import path
from .views import TaskList, TaskDetail, TaskCreate

urlpatterns =[
  path('', TaskList.as_view(), name='tasks'),
  path('task/<int:pk>/', TaskDetail.as_view() , name='task'),
  path('task/create/',TaskCreate.as_view(), name='task-create'),
]

task/create/ 경로에서 task를 입력할 수 있고, 폼이 정상적으로 제출되면, name = 'tasks' 인  ' ' 경로로 이동한다.

 

task_form.html

<h1>Task Form</h1>

<form method="POST">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value = 'add task'>
</form>

form 태그 안에 {{ form.as_p }} 로 폼을 그려준다.

*csrf_token은 데이터를 Post 요청 할 때 수정 , 삭제 등 원치 않는 요청으로 공격하는 것을 방지

 

 

<화면1. 제출>

<화면2. 제출 완료: 리스트 화면으로 돌아가고 shopping 이 추가됨>

반응형