Class view Crud
Create App blog
models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
Add Model To Admin Panel
admin.py
from django.contrib import admin
from . models import Post
admin.site.register(Post)
Urls.py
from django.urls import path
from . import views
from . import views
urlpatterns=[
path('',views.home,name='home'),
path('posts/',views.PostList.as_view(),name='posts'),
path('post/<int:pk>/',views.PostDetails.as_view(),name='post'),
path('post/create/',views.CreateView.as_view(),name='post-create'),
path('post/update/<int:pk>',views.PostUpdate.as_view(),name='post-update'),
path('post/<int:pk>/delete',views.PostDelete.as_view(),name='post-delete')
]
Views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.urls import reverse_lazy
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView,UpdateView,DeleteView
from . models import Post
# Create your views here.
def home(request):
return render(request,'blog/index.html')
class PostList(ListView):
model = Post
context_object_name = 'posts'
class PostDetails(DetailView):
model = Post
context_object_name = 'post'
class CreateView(CreateView):
model=Post
fields=['title','description']
success_url = reverse_lazy('posts')
class PostUpdate(UpdateView):
model = Post
fields = ['title','description']
success_url=reverse_lazy('posts')
class PostDelete(DeleteView):
model = Post
success_url = reverse_lazy('posts')
Templates
templates/blog/post_form.html
{% extends 'base.html' %}
{% block content %}
<form method="post" novalidate>
{% if post %} Update {% else %} Create {% endif %}
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit">
</form>
{% endblock content %}
templates/blog/post_list.html
{% extends 'base.html' %}
{% block content %}
{% if posts %}
{% for post in posts %}
<h2> {{ post.title}}</h2>
<a href="{% url 'post' post.id %}">{{ post.title}}</a>
<a href="{% url 'post-update' post.id %}"> Edit </a>
<a href="{% url 'post-delete' post.id %}"> Delete </a>
<i class="bi bi-trash"></i>
{% endfor %}
{% endif %}
{% endblock content %}
templates/blog/post_detail.html
{% extends 'base.html' %}
{% block content %}
<article class="post">
<header>
{{ post.title }}
</header>
<p>{{ post.description }}</p>
</article>
{% endblock content %}
templates/blog/post_confirm_delete.html
<form method="post">
{% csrf_token %}
<p>Are you sure you want to delete ""?</p>
<input type="submit" value="Confirm">
</form>
Last updated