Django

Django CRUD Basics

Create, read, update, delete with forms

CRUD with ModelForm

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404
from .forms import TaskForm
from .models import Task

@login_required
def task_create(request):
    if request.method == "POST":
        form = TaskForm(request.POST)
        if form.is_valid():
            task = form.save(commit=False)
            task.project.owner = request.user  # enforce ownership in save()
            form.save()
            return redirect("tasks:task-list")
    else:
        form = TaskForm()
    return render(request, "tasks/task_form.html", {"form": form})

@login_required
def task_update(request, pk):
    task = get_object_or_404(Task, pk=pk, project__owner=request.user)
    form = TaskForm(request.POST or None, instance=task)
    if request.method == "POST" and form.is_valid():
        form.save()
        return redirect("tasks:task-detail", pk=pk)
    return render(request, "tasks/task_form.html", {"form": form})

Use POST-Redirect-GET after successful POST to prevent duplicate submissions on refresh.