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 view | Purpose |
|---|---|
| ListView | Display a list of objects |
| DetailView | Display a single object's details |
| CreateView | Display and process a form to create an object |
| UpdateView | Display and process a form to edit an object |
| DeleteView | Display 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 | उद्देश्य |
|---|---|
| ListView | Objects की list दिखाना |
| DetailView | एक object की details दिखाना |
| CreateView | Object बनाने का form |
| UpdateView | Object edit करने का form |
| DeleteView | Object 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?