# 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>