Custom Crud

Student Crud

A Student Information Crud .

Logo

create an app using the following command

python manage.py startapp students

Add App With Django Project


INSTALLED_APPS = [
    'students',
]

project urls.py

path('students/', include('students.urls')),

create a model: In the models.py file of the students app, define a model for the students.

models.py

from django.db import models

# Create your models here.
class Student(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()
    date_of_birth = models.DateField()

Create a form: In the forms.py file of the students app

forms.py

from django import forms
from .models import Student

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['first_name', 'last_name', 'email', 'date_of_birth']

Create views: In the views.py file of the students app

views.py

from django.shortcuts import render, redirect
from .forms import StudentForm
from .models import Student

def student_list(request):
    students = Student.objects.all()
    return render(request, 'students/student_list.html', {'students': students})

def student_create(request):
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('student_list')
    else:
        form = StudentForm()
    return render(request, 'students/student_form.html', {'form': form})

def student_update(request, id):
    student = Student.objects.get(id=id)
    if request.method == 'POST':
        form = StudentForm(request.POST, instance=student)
        if form.is_valid():
            form.save()
            return redirect('student_list')
    else:
        form = StudentForm(instance=student)
    return render(request, 'students/student_form.html', {'form': form})

def student_delete(request, id):
    student = Student.objects.get(id=id)
    student.delete()
    return redirect('student_list')

Create templates: Create templates for the student list, create, update and delete operations

templates/students/student_list.html



<h1>Student List</h1>

<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Email</th>
      <th>Date of Birth</th>
      <th>Actions</th>
    </tr>
  </thead>
  <tbody>
    {% for student in students %}
    <tr>
      <td>{{ student.first_name }}</td>
      <td>{{ student.last_name }}</td>
      <td>{{ student.email }}</td>
      <td>{{ student.date_of_birth }}</td>
      <td>
        <a href="{% url 'student_update' student.id %}">Edit</a> |
        <a href="{% url 'student_delete' student.id %}" onclick="return confirm('Are you sure?');">Delete</a>
      </td>
    </tr>
    {% endfor %}
  </tbody>
</table>

<a href="{% url 'student_create' %}">Add Student</a>

templates/students/student_form.html


<!-- students/student_form.html -->

<h1>{% if form.instance.id %}Edit{% else %}Add{% endif %} Student</h1>

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Save</button>
</form>

<a href="{% url 'student_list' %}">Back to list</a>

Create URL patterns: In the urls.py file of the students app urls.py

from django.urls import path
from .views import student_list, student_create, student_update, student_delete

urlpatterns = [
    path('', student_list, name='student_list'),
    path('create/', student_create, name='student_create'),
    path('update/<int:id>/', student_update, name='student_update'),
    path('delete/<int:id>/', student_delete, name='student_delete'),
]

*Link student app urls.py with project urls.py

Run migrations

python manage.py makemigrations
python manage.py migrate
Logo

Last updated