CreateView — CBV для создания объекта через форму.
Базовый пример
from django.views.generic import CreateView
from django.urls import reverse_lazy
from .models import Task
from .forms import TaskForm
class TaskCreateView(CreateView):
model = Task
form_class = TaskForm
template_name = 'tasks/task_form.html'
success_url = reverse_lazy('task-list')
URL
path('tasks/new/', views.TaskCreateView.as_view(), name='task-create'),
Шаблон
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Создать</button>
</form>
Автоматический owner
class TaskCreateView(LoginRequiredMixin, CreateView):
model = Task
fields = ['title', 'description', 'priority', 'project']
def form_valid(self, form):
form.instance.owner = self.request.user
return super().form_valid(form)
def get_success_url(self):
return reverse('task-detail', kwargs={'pk': self.object.pk})
fields vs form_class
# Простой вариант — перечислить поля
fields = ['title', 'description', 'priority']
# Расширенный — использовать форму с кастомной валидацией
form_class = TaskForm
Начальные значения
def get_initial(self):
initial = super().get_initial()
initial['project'] = self.request.GET.get('project')
return initial
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!