CreateView is a CBV for creating an object through a form.
Basic Example
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'),
Template
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Create</button>
</form>
Automatic Owner Assignment
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
# Simple option — list the fields directly
fields = ['title', 'description', 'priority']
# Advanced option — use a form with custom validation
form_class = TaskForm
Initial Values
def get_initial(self):
initial = super().get_initial()
initial['project'] = self.request.GET.get('project')
return initial
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!