$ ls cbvApp/templates/cbvApp/
student_confirm_delete.html student_detail.html student_form.html student_list.html
# models.py
from django.db import models
from django.urls import reverse
class Student(models.Model):
firstName = models.CharField(max_length=20)
lastName = models.CharField(max_length=20)
testScore = models.FloatField()
def get_absolute_url(self):
return reverse('detail', kwargs={'pk': self.pk})
# urls.py
from cbvApp.views import StudentListView, StudentDetailView, StudentCreateView, StudentUpdateView, StudentDeleteView
urlpatterns = [
path('students/', StudentListView.as_view(), name='students'),
path('<int:pk>/', StudentDetailView.as_view(), name='detail'),
path('create/', StudentCreateView.as_view(), name='create'),
path('update/<int:pk>', StudentUpdateView.as_view(), name='update'),
path('delete/<int:pk>', StudentDeleteView.as_view(), name='delete'),
]
# views.py
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Student
class StudentListView(ListView):
model = Student
# default template name is student_list.html
# default context object name is student_list
# all the student data will be in student_list
class StudentDetailView(DetailView):
model = Student
# default template name is student_detail.html
# default context object name is student
# all the student data will be in student
class StudentCreateView(CreateView):
model = Student
fields = ('firstName', 'lastName', 'testScore')
# default template name is student_form.html
# after student been created it will go to models.py get_absolute_url method
class StudentUpdateView(UpdateView):
model = Student
fields = ('firstName', 'lastName', 'testScore')
class StudentDeleteView(DeleteView):
model = Student
success_url = reverse_lazy('students')
<!-- student_list.html -->
Students</br>
{% for student in student_list %}
<a href="/{{ student.id }}">{{ student.id }}</a>
{{ student.firstName }}
{{ student.lastName }}
{{ student.testScore }}
<a href="/delete/{{student.id}}">Delete</a>
<a href="/update/{{student.id}}">Update</a></br>
{% endfor %}
</br>
<a href="/create">Create</a>
<!-- student_detail.html -->
Student Detail</br>
{{ student.id }}
{{ student.firstName }}
{{ student.lastName }}
{{ student.testScore }}
<a href="/delete/{{student.id}}">Delete</a>
<a href="/update/{{student.id}}">Update</a></br>
</br>
<a href="/create">Create</a>
<!-- student_form.html -->
Create Student
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<input type='submit' value='Sent'>
</form>
<!-- student_confirm_delete.html -->
Delete Student
{{ student.firstName }}
<form method="post">
<input type="submit" value="Confirm">
{% csrf_token %}
</form>
<a href="/{{ student.id }}">Cancel</a>