본문 바로가기
개발일지/Django

Django - cbvUpdateView

by 개발에정착하고싶다 2022. 10. 1.

# 첫번째 파일

school > classroom > views.py

from django.shortcuts import render
# 이것은 내가 찾고 있는 URL의 실제 이름을 리턴한다.
# reverse는 string타입을 리턴하고 reverse_lazy는 object 타입을 리턴한다.
# 또한 success_url 을 사용하는경우, reverse_lazy를 사용한다.
from django.urls import reverse, reverse_lazy
from django.views.generic import TemplateView, FormView, CreateView, ListView, DetailView, UpdateView
from classroom.models import Teacher
from classroom.forms import ContactForm

# Create your views here.
# def home_view(request):
#     return render(request, 'classroom/home.html')

class HomeView(TemplateView):
    template_name = 'classroom/home.html'

class ThankYouView(TemplateView):
    template_name = 'classroom/thank_you.html'

class TeacherCreateView(CreateView):
    model = Teacher
    # model_form.html
    # .save()
    fields = '__all__'
    success_url = reverse_lazy('classroom:thank_you')

class TeacherListView(ListView):
    # model_list.html
    model = Teacher
    # queryset = Teacher.objects.all()
    queryset = Teacher.objects.order_by('first_name')

    context_object_name = 'teacher_list'

class TeacherDetailView(DetailView):
    # return only one model entry pk
    # model_detail.html
    model = Teacher
    # PK -> {{teacher}}
    
class TeacherUpdateView(UpdateView):
    model = Teacher
    # fields = ['last_name', 'first_name']
    fields = '__all__'
    success_url = reverse_lazy('classroom:list_teacher')
    

class ContactFormView(FormView):
    form_class = ContactForm
    template_name = 'classroom/contact.html'

    # URL NOT a template.html
    success_url = reverse_lazy('classroom:thank_you')

    # what to do with form?
    def form_valid(self, form):
        print(form.cleaned_data)

        # ContactForm(request.POST)
        return super().form_valid(form)

# 두번째 파일

school > classroom > urls.py

from django.urls import path
from .views import (HomeView, ThankYouView, 
                    ContactFormView, TeacherCreateView,
                    TeacherListView, TeacherDetailView,
                    TeacherUpdateView)

app_name = 'classroom'

# domain.com/classroom/
urlpatterns = [
    path('', HomeView.as_view(), name = 'home'), # path expects a function
    path('thank_you/', ThankYouView.as_view(), name = 'thank_you'), # path expects a function
    path('contact/', ContactFormView.as_view(), name = 'contact'),
    path('create_teacher/', TeacherCreateView.as_view(), name = 'create_teacher'),
    path('list_teacher/', TeacherListView.as_view(), name = 'list_teacher'),
    path('teacher_detail/<int:pk>', TeacherDetailView.as_view(), name = 'detail_teacher'),
    path('update_teacher/<int:pk>', TeacherUpdateView.as_view(), name = 'update_teacher')
]

 


# 세번째 파일

school > classroom > templates > classroom > teacher_list.html

<h1>List of Teacher (ListView)</h1>
<ul>
    {% for teacher in teacher_list %}
        <li>
            <a href="/classroom/teacher_detail/{{teacher.id}}">{{teacher.first_name}} {{teacher.last_name}}</a>
        </li>
        <ul>
            <li>
                <a href='/classroom/update_teacher/{{teacher.id}}'>Update Information for {{teacher.first_name}}</a>
            </li>
        </ul>
            
        


    {% endfor %}
</ul>

'개발일지 > Django' 카테고리의 다른 글

*매우중요 Django - views파일에서 하나의 함수로 다중 urls 호출하기  (0) 2022.10.07
Django - cbvDeleteView  (0) 2022.10.01
Django - cbvDetailView  (0) 2022.10.01
Django - cbv ListView  (0) 2022.10.01
Django - cbv CreateView  (0) 2022.10.01