반응형
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 이 추가됨>
반응형
'Today I Learned > django' 카테고리의 다른 글
(장고) ORM tutorial #1. all(), get() , filter(), save(), delete() (0) | 2023.08.21 |
---|---|
장고 (django) - LoginView, LogoutView, LoginRequireMixin 설정하기 (0) | 2023.08.11 |
장고(django) postgresql 사용하기 (0) | 2023.07.26 |
장고 (django) pagination 구현하기 (0) | 2023.07.19 |
장고(django) QuerySets와 매니저로 작업하기 (0) | 2023.07.18 |