Django 5.0 вышел в декабре 2023 года и принес множество улучшений для разработчиков. Рассмотрим ключевые нововведения этой мажорной версии.
Основные изменения
Facet фильтры в Django Admin
Одно из самых заметных обновлений — новая возможность faceted filtering в админке. Это позволяет добавлять фильтры с подсчетом количества элементов.
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_filter = ['category', 'status']
# Новое: автоматический подсчет
def get_list_filter(self, request):
return [
('category', admin.RelatedFieldListFilter),
('status', admin.ChoicesFieldListFilter),
]
Упрощенные формы
Django 5.0 упростил работу с формами, добавив новые возможности для валидации.
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
# Новый синтаксис для валидации
def clean(self):
cleaned_data = super().clean()
# Валидация стала проще
return cleaned_data
Улучшения в ORM
Добавлены новые возможности для работы с базой данных.
from django.db.models import Q, F
# Новые возможности аннотаций
articles = Article.objects.annotate(
is_popular=Q(views__gt=1000) & Q(likes__gt=100)
).filter(is_popular=True)
# Улучшенная работа с JSON полями
Article.objects.filter(
metadata__contains={'featured': True}
)
Асинхронные view
Django 5.0 улучшил поддержку асинхронных представлений.
from django.http import JsonResponse
import asyncio
async def async_view(request):
# Асинхронные операции
data = await fetch_external_data()
return JsonResponse({'data': data})
async def fetch_external_data():
await asyncio.sleep(1)
return {'result': 'success'}
Заключение
Django 5.0 — солидное обновление с улучшениями в админке, ORM и асинхронной поддержке. Рекомендуется для всех новых проектов.
Комментарии (2)
Войдите, чтобы оставить комментарий
Интересный взгляд на проблему. Не согласен с некоторыми моментами, но в целом качественно.
А как это применить в моем случае?