Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 3 of 9 · Django Views & URL Routing
Interview question

What are Django's generic class-based views like ListView, DetailView, and CreateView? Django के generic class-based views जैसे ListView, DetailView, CreateView क्या हैं?

Answer

Generic CBVs implement common view patterns (listing, detail display, create/update/delete forms) with minimal code, following Django's DRY philosophy.

Generic viewPurpose
ListViewDisplay a list of objects
DetailViewDisplay a single object's details
CreateViewDisplay and process a form to create an object
UpdateViewDisplay and process a form to edit an object
DeleteViewDisplay a confirmation and delete an object
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Book

class BookListView(ListView):
    model = Book
    template_name = 'book_list.html'   # defaults to book_list.html if omitted
    context_object_name = 'books'       # defaults to 'object_list' if omitted
    paginate_by = 10

    def get_queryset(self):
        return Book.objects.filter(available=True).order_by('title')

class BookDetailView(DetailView):
    model = Book
    template_name = 'book_detail.html'

class BookCreateView(CreateView):
    model = Book
    fields = ['title', 'author', 'price']
    template_name = 'book_form.html'
    success_url = reverse_lazy('book-list')  # redirect after successful creation

class BookUpdateView(UpdateView):
    model = Book
    fields = ['title', 'price']
    template_name = 'book_form.html'

class BookDeleteView(DeleteView):
    model = Book
    template_name = 'book_confirm_delete.html'
    success_url = reverse_lazy('book-list')

# urls.py
from django.urls import path
urlpatterns = [
    path('books/', BookListView.as_view(), name='book-list'),
    path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
    path('books/new/', BookCreateView.as_view(), name='book-create'),
    path('books/<int:pk>/edit/', BookUpdateView.as_view(), name='book-update'),
    path('books/<int:pk>/delete/', BookDeleteView.as_view(), name='book-delete'),
]

# Overriding behavior with hooks like form_valid()
class BookCreateView(CreateView):
    model = Book
    fields = ['title', 'price']
    def form_valid(self, form):
        form.instance.created_by = self.request.user  # set extra field before saving
        return super().form_valid(form)

Generic CBVs common view patterns (listing, detail, create/update/delete forms) को minimal code में implement करते हैं, DRY philosophy follow करते हुए।

Generic viewउद्देश्य
ListViewObjects की list दिखाना
DetailViewएक object की details दिखाना
CreateViewObject बनाने का form
UpdateViewObject edit करने का form
DeleteViewObject delete करने की confirmation
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Book

class BookListView(ListView):
    model = Book
    template_name = 'book_list.html'
    context_object_name = 'books'
    paginate_by = 10

    def get_queryset(self):
        return Book.objects.filter(available=True).order_by('title')

class BookDetailView(DetailView):
    model = Book
    template_name = 'book_detail.html'

class BookCreateView(CreateView):
    model = Book
    fields = ['title', 'author', 'price']
    template_name = 'book_form.html'
    success_url = reverse_lazy('book-list')

class BookUpdateView(UpdateView):
    model = Book
    fields = ['title', 'price']
    template_name = 'book_form.html'

class BookDeleteView(DeleteView):
    model = Book
    template_name = 'book_confirm_delete.html'
    success_url = reverse_lazy('book-list')

# form_valid() override करना
class BookCreateView(CreateView):
    model = Book
    fields = ['title', 'price']
    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)

Was this answer clear?