In this shot, we are going to learn how to get the details of a particular instance. Detail view refers to a view that displays a particular instance of a table from the database with all the necessary details. Detail view is used to display multiple types of data on a single page or view, e.g., the details of a user.
Run the following commands.
pip
is a package manager for Python packages.
pip install pipenv
pipenv shell
pipenv install django
Then:
django-admin startproject crud ./
python manage.py startapp codebase
python manage.py migrate
python manage.py runserver
Go to settings.py
and add the following.
settings.py
settings.py
helps register your app and packages that are being installed, and even writes rules.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'codebase' ]
In the codebase
app folder, go to models.py
.
models.py
This file is responsible for creating the model for the database.
from django.db import models from django.urls import reverse class CRUD(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() level = models.CharField(max_length=30) date = models.DateTimeField(auto_now_add=True) #display the data with name def __str__(self): return self.name
admin.py
In this file, we import and register our created model. By doing so, we can see the model when logged in as an admin.
from django.contrib import admin from .models import CRUD admin.site.register(CRUD)
Create a file and name it forms.py
The forms
file is responsible for creating Django forms, which are like HTML forms, but dynamic.
forms.py
from django import forms from .models import CRUD class CRUDFORM(forms.ModelForm): name = forms.CharField(widget=forms.TextInput(attrs={ "class": "form-control", "placeholder": "name" })) age= forms.CharField(widget=forms.TextInput(attrs={ 'type': "number", "class": "form-control", "placeholder": "age" })) level = forms.CharField(widget=forms.TextInput(attrs={ "class": "form-control", "placeholder": "level" })) class Meta: model = CRUD fields = [ 'name', 'age','level' ]
views.py
This file is used to create functions or classes that visualize how a route will operate.
from django.shortcuts import redirect, render, get_object_or_404 from .models import CRUD from .forms import CRUDFORM def home(request): queryset = CRUD.objects.all().order_by('-date') context = { 'queryset': queryset } return render(request, 'app/base.html', context) def create(request): form = CRUDFORM(request.POST or None) if request.method == "POST": if form.is_valid(): form.save() return redirect ('home') context = { "form":form } return render(request, 'app/createform.html', context) def detail(request, detail_id): data = get_object_or_404(CRUD, pk=detail_id) context = { "data":data } return render(request, "app/detail.html", context)
In the codebase app, create a folder and name it templates
. Inside the templates
folder, create another folder and name it app
. Then, inside the app
folder, create base.html
, detail.html
, and createform.html
files.
base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Crud</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <div class="container mt-3"> <!-- this code block is used to used to create a url link --> <a href="{% url 'create'%}" >link to create a form</a> <hr> <!-- this code block is used to loop the database --> {% for data in queryset %} <div class="list-group mb-3"> <!-- this code block is used to used to create a url link --> <!-- double curly braces is used to display data from the database --> <a href="{% url 'detail' data.id %}" class="list-group-item list-group-item-action">Name: {{data.name}}</a> <a href="#" class="list-group-item list-group-item-action">Age: {{data.age}}</a> <a href="#" class="list-group-item list-group-item-action">Level: {{data.level}}</a> </div> <!-- end of the loop --> {% endfor %} <hr> </div> </body> </html>
createform.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Crud</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <div class="container mt-5"> <form method="POST" action=""> <!-- for csrf token --> {% csrf_token %} <div class="form-group mb-3"> <!-- double curly braces is used to display data from the database --> {{form.name}} {{form.name.errors}} </div> <div class="form-group mb-3"> {{form.age}} {{form.age.errors}} </div> <div class="form-group mb-3"> {{form.level}} {{form.level.errors}} </div> <input type="submit" class="btn btn-outline-success" > </form> <!DOCTYPE html> <a href="{% url 'home'%}">Home</a> </div> </body>
detail.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <a href="{% url 'home'%}">Home</a> <!-- double curly braces is used to display data from the database --> <li>{{data.name}}</li> <li>{{data.age}}</li> <li>{{data.level}}</li> </body> </html>
In the urls.py
file in the crud
folder, add the code below.
urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # including the codebase urls.py file path('', include('codebase.urls')) ]
Then, in the codebase
folder, create a file and name it urls.py
.
urls.py
is responsible for creating different routes.
urls.py
from django.urls import path from .view import home, create, detail urlpatterns = [ path('',home, name="home" ), path('create/', create, name="create"), path('detail/<int:detail_id>/', detail, name="detail"), ]
Run the following commands:
python manage.py makemigrations
python manage.py migrate
In case you want to create a super-user, run the following command:
python manage.py createsuperuser
After that, run:
python manage.py runserver
Then, go to http://127.0.0.1:8000/admin and login in order to access the admin panel.
RELATED TAGS
CONTRIBUTOR
View all Courses