These all are predefined class view that is used to perform database operation.
1) CreateView Example:-
1 ) Create Model Class:-
class Job(models.Model):
jobtitle = models.CharField(max_length=100)
jobdescription = models.CharField(max_length=500)
2) Create Classview under views.py
from django.views.generic.edit import CreateView
from django.urls import reverse
class JobCreate(CreateView):
model = Job
fields = ['jobtitle', 'jobdescription']
success_url='path'
3) create path urls.py:-
from .views import JobCreate
path('jobcreate',JobCreate.as_view())
4) create HTML file under template and name will job_form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
</body>
</html>
2) Example of ListView:-
1) Define the model if not exist, in this example, I am using Job model
2) Create ListView Class under views.py file
from django.views.generic.list import ListView
class JobList(ListView):
model = Job # Job.objects.all()
3) create the template file or HTML file whose name must be modelclassname_list, I have created job_list.html and written the following code.
<div>
{% for object in object_list %}
<!-- Display Objects -->
<li>{{ object.jobtitle }}</li>
<li>{{ object.jobdescription }}</li>
<hr/>
<!-- If object_list is empty -->
{% empty %}
<li>No objects yet.</li>
{% endfor %}
</div>
4) create urls.py and write the following code:-
path('joblist',JobList.as_view())
Code of Update, Delete, and Details View:-
1) Create path under urls.py
from .views import JobCreate,JobList,JobDetail,JobUpdate,JobDelete
path('<pk>',JobDetail.as_view()),
path('<pk>/jupdate',JobUpdate.as_view()),
path('<pk>/jdelete',JobDelete.as_view())
2) Create a model class, I have used the same Job Model
3) Create Classes under views.py
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from django.views.generic.edit import DeleteView
class JobDetail(DetailView):
model = Job # Job.objects.all()
class JobUpdate(UpdateView):
model = Job
fields = ['jobtitle', 'jobdescription']
success_url = '/guest/joblist'
class JobDelete(DeleteView):
model = Job
success_url = '/guest/joblist'
4) create HTML file modelclassname_detail, modelclass_form and modelclass_confirm_delete.
for updateview and createview template page will be common.
Code of job_detail.html
<h1>{{ object.jobtitle }}</h1>
<p>{{ object.jobdescription }}</p>
Code of job_confirm_delete.html
<form method="post">{% csrf_token %}
<p>Are you sure you want to delete "{{ object }}"?</p>
<input type="submit" value="Confirm">
</form>
5) Link all URLs under job_list.html
<div>
{% for object in object_list %}
<!-- Display Objects -->
<li>{{ object.jobtitle }}</li>
<li>{{ object.jobdescription }}</li>
<a href="/guest/{{object.id}}">View Job</a>
<a href="/guest/{{object.id}}/jupdate">Update Job</a>
<a href="/guest/{{object.id}}/jdelete">Delete Job</a>
<hr/>
<!-- If object_list is empty -->
{% empty %}
<li>No objects yet.</li>
{% endfor %}
</div>
POST Answer of Questions and ASK to Doubt