📌적용
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, HttpResponseRedirect, redirect
from django.views.generic import TemplateView, CreateView, UpdateView, DeleteView, ListView, DetailView, FormView
from .models import Task, ChecklistItem
from django.utils import timezone
from django.core.paginator import Paginator
from django.urls import reverse_lazy
class ChecklistCreateView(CreateView):
model = ChecklistItem
fields = ['content']
template_name = "pages/checklist_create.html"
success_url = "/tasks/"
def get_success_url(self) -> str:
return self.success_url + str(self.kwargs['task_id']) + '/'
def form_valid(self, form):
data = form.save(commit=False)
data.task = Task.objects.get(id=self.kwargs['task_id'])
data.save()
return HttpResponseRedirect(self.get_success_url())
- Django에서 Form 클래스나 ModelForm 클래스를 사용하여 사용자 입력 데이터를 처리할 때, save() 메서드를 사용하여 데이터를 저장할 수 있습니다. 그러나 save() 메서드를 사용할 때, commit=False를 추가하여 호출할 수도 있습니다.
- form.save() 메서드는 Form 클래스나 ModelForm 클래스에서 호출될 때, 입력된 데이터를 데이터베이스에 바로 저장합니다. 즉, 이 메서드를 사용하면 데이터가 바로 저장되므로, 중간에 오류가 발생하면 데이터베이스에 저장된 데이터도 삭제되어야 할 수도 있습니다.
- form.save(commit=False) 메서드는 입력된 데이터를 데이터베이스에 저장하지 않고, 메모리에만 저장합니다. 이 메서드를 사용하면, 데이터베이스에 저장하기 전에 추가적인 유효성 검사나 처리를 수행할 수 있습니다. 이후에 데이터를 저장하기 위해서는, 다시 form.save() 메서드를 호출하여 데이터베이스에 저장할 수 있습니다.