Skip to content

Instantly share code, notes, and snippets.

@eclecticmiraclecat
Created November 5, 2020 14:06
Show Gist options
  • Save eclecticmiraclecat/8be9d02c69f5e7c37742fd99e61f4d5b to your computer and use it in GitHub Desktop.
Save eclecticmiraclecat/8be9d02c69f5e7c37742fd99e61f4d5b to your computer and use it in GitHub Desktop.
$ 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment