SuccessMessageMixin — миксин для отображения flash-сообщения после успешного выполнения формы в CBV.
Установка
Не требует установки — входит в Django:
from django.contrib.messages.views import SuccessMessageMixin
Базовое использование
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Task
class TaskCreateView(SuccessMessageMixin, CreateView):
model = Task
fields = ['title', 'description', 'priority']
success_url = reverse_lazy('task-list')
success_message = 'Задача "%(title)s" успешно создана!'
class TaskUpdateView(SuccessMessageMixin, UpdateView):
model = Task
fields = ['title', 'description', 'priority', 'status']
success_url = reverse_lazy('task-list')
success_message = 'Задача обновлена!'
Динамическое сообщение
class TaskCreateView(SuccessMessageMixin, CreateView):
model = Task
fields = ['title']
success_url = reverse_lazy('task-list')
def get_success_message(self, cleaned_data):
return f'Задача "{self.object.title}" создана и назначена вам!'
Отображение в шаблоне
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
Порядок наследования
# Правильно: SuccessMessageMixin ПЕРЕД базовым классом
class TaskCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
...
# Неправильно
class TaskCreateView(CreateView, SuccessMessageMixin): # не сработает
...
Аналог для function-based views
from django.contrib import messages
def task_create(request):
if form.is_valid():
task = form.save()
messages.success(request, f'Задача "{task.title}" создана!')
return redirect('task-list')
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!