← Назад к вопросам
Какие используешь классы в Django?
1.0 Junior🔥 271 комментариев
#Django#Базы данных (SQL)
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Классы в Django Framework
Django предоставляет множество встроенных классов для ускорения разработки веб-приложений. Вот основные, которые я использую регулярно.
1. Model Classes
models.Model — базовый класс для всех моделей данных:
from django.db import models
from django.utils import timezone
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_published = models.BooleanField(default=False)
class Meta:
ordering = ["-created_at"]
indexes = [
models.Index(fields=["is_published", "-created_at"]),
]
def __str__(self):
return self.title
2. View Classes
Class-Based Views (CBV) предоставляют переиспользуемую логику:
from django.views.generic import ListView, DetailView, CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
class ArticleListView(ListView):
model = Article
template_name = "articles/list.html"
paginate_by = 20
def get_queryset(self):
return Article.objects.filter(is_published=True)
class ArticleDetailView(DetailView):
model = Article
template_name = "articles/detail.html"
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = ["title", "content"]
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
3. Form Classes
forms.ModelForm для работы с моделями:
from django import forms
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ["title", "content", "tags"]
widgets = {
"title": forms.TextInput(attrs={"class": "form-control"}),
"content": forms.Textarea(attrs={"class": "form-control", "rows": 10}),
}
def clean_title(self):
title = self.cleaned_data.get("title")
if len(title) < 5:
raise forms.ValidationError("Минимум 5 символов")
return title
4. Serializer Classes (DRF)
Serializers для REST API:
from rest_framework.serializers import ModelSerializer
class AuthorSerializer(ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "email"]
class ArticleSerializer(ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = Article
fields = ["id", "title", "content", "author", "created_at"]
read_only_fields = ["created_at"]
5. ViewSet Classes (DRF)
ViewSets для CRUD операций:
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.decorators import action
class ArticleViewSet(ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(author=self.request.user)
@action(detail=True, methods=["post"])
def publish(self, request, pk=None):
article = self.get_object()
article.is_published = True
article.save()
return Response({"status": "published"})
6. Manager и QuerySet
Кастомные менеджеры для часто используемых запросов:
class PublishedManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_published=True)
class Article(models.Model):
objects = models.Manager()
published = PublishedManager()
# Использование
published = Article.published.all()
Django классы обеспечивают мощный и гибкий фреймворк для разработки веб-приложений.