Django ViewClass 2-8) Checklist Implementation

Turtle·2023년 12월 20일
0
post-thumbnail

📌적용

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"
    # 가변인자에 해당하는 'task_id'를 아래의 get_success_url로 가져올 수 있음
    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())

📌form.save() Vs form.save(commit=False)

  • Django에서 Form 클래스나 ModelForm 클래스를 사용하여 사용자 입력 데이터를 처리할 때, save() 메서드를 사용하여 데이터를 저장할 수 있습니다. 그러나 save() 메서드를 사용할 때, commit=False를 추가하여 호출할 수도 있습니다.

①. form.save()

  • form.save() 메서드는 Form 클래스나 ModelForm 클래스에서 호출될 때, 입력된 데이터를 데이터베이스에 바로 저장합니다. 즉, 이 메서드를 사용하면 데이터가 바로 저장되므로, 중간에 오류가 발생하면 데이터베이스에 저장된 데이터도 삭제되어야 할 수도 있습니다.

②. form.save(commit=False)

  • form.save(commit=False) 메서드는 입력된 데이터를 데이터베이스에 저장하지 않고, 메모리에만 저장합니다. 이 메서드를 사용하면, 데이터베이스에 저장하기 전에 추가적인 유효성 검사나 처리를 수행할 수 있습니다. 이후에 데이터를 저장하기 위해서는, 다시 form.save() 메서드를 호출하여 데이터베이스에 저장할 수 있습니다.

0개의 댓글