django ejemplo de un formulario crud

# models.py
from django.db import models

class Item(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()

# forms.py
from django import forms
from .models import Item

class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['name', 'description']

# views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Item
from .forms import ItemForm

def item_list(request):
    items = Item.objects.all()
    return render(request, 'item_list.html', {'items': items})

def item_detail(request, pk):
    item = get_object_or_404(Item, pk=pk)
    return render(request, 'item_detail.html', {'item': item})

def item_new(request):
    if request.method == "POST":
        form = ItemForm(request.POST)
        if form.is_valid():
            item = form.save(commit=False)
            item.save()
            return redirect('item_detail', pk=item.pk)
    else:
        form = ItemForm()
    return render(request, 'item_edit.html', {'form': form})

def item_edit(request, pk):
    item = get_object_or_404(Item, pk=pk)
    if request.method == "POST":
        form = ItemForm(request.POST, instance=item)
        if form.is_valid():
            item = form.save(commit=False)
            item.save()
            return redirect('item_detail', pk=item.pk)
    else:
        form = ItemForm(instance=item)
    return render(request, 'item_edit.html', {'form': form})

def item_delete(request, pk):
    item = get_object_or_404(Item, pk=pk)
    item.delete()
    return redirect('item_list')
<!-- item_list.html -->
{% extends 'base_generic.html' %}

{% block content %}
  <h1>Item List</h1>
  {% for item in items %}
    <p><a href="{% url 'item_detail' pk=item.pk %}">{{ item.name }}</a></p>
  {% endfor %}
{% endblock %}

<!-- item_detail.html -->
{% extends 'base_generic.html' %}

{% block content %}
  <h1>{{ item.name }}</h1>
  <p>{{ item.description }}</p>
{% endblock %}

<!-- item_edit.html -->
{% extends 'base_generic.html' %}

{% block content %}
  <h1>{% if form.instance.pk %}Edit Item{% else %}New Item{% endif %}</h1>
  <form method="post" class="item-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Save</button>
  </form>
{% endblock %}
<!-- base_generic.html -->
<!DOCTYPE html>
<html>
<head>
  <title>{% block title %}Django CRUD Example{% endblock %}</title>
</head>
<body>
  <div id="content">
    {% block content %}{% endblock %}
  </div>
</body>
</html>