Implementing a simple CRUD application with Django

Implementing a Simple CRUD Application with Django

Django is a powerful web framework that allows developers to build robust web applications quickly and efficiently. One of the foundational concepts in web development is the CRUD operation, which stands for Create, Read, Update, and Delete. Implementing a simple CRUD application with Django is an excellent way for developers to grasp the framework's capabilities while creating a functional web application. In this article, we will walk you through the process step-by-step, providing code snippets and actionable insights along the way.

What is CRUD?

CRUD operations represent the four basic functions of persistent storage. Here’s a brief overview of each operation:

  • Create: Inserting new records into the database.
  • Read: Retrieving data from the database.
  • Update: Modifying existing records.
  • Delete: Removing records from the database.

These operations are essential for any application that manages data, making CRUD apps a popular choice for learning and development.

Use Cases for CRUD Applications

CRUD applications are versatile and can be applied in various scenarios, including:

  • Content Management Systems: Blogs, articles, and other content platforms.
  • Inventory Systems: Managing products, orders, and stock levels.
  • User Management: Handling user accounts, profiles, and permissions.
  • Task Management: Applications that track projects, tasks, and deadlines.

Setting Up Your Django Project

Step 1: Install Django

Before we begin, ensure you have Python and pip installed on your machine. Then, install Django using pip:

pip install django

Step 2: Create a New Django Project

Once Django is installed, create a new project by running:

django-admin startproject mycrudapp
cd mycrudapp

Step 3: Create a New App

In Django, applications are modular components. Create a new app called products:

python manage.py startapp products

Add the products app to your project by modifying settings.py:

# mycrudapp/settings.py
INSTALLED_APPS = [
    ...
    'products',
]

Step 4: Define the Product Model

In your app's models.py file, define a simple Product model:

# products/models.py
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.IntegerField()

    def __str__(self):
        return self.name

Step 5: Create Database Tables

Run the following commands to create the necessary database tables:

python manage.py makemigrations
python manage.py migrate

Step 6: Implement CRUD Views

Now, let’s create views for our CRUD operations. Open views.py and add the following code:

# products/views.py
from django.shortcuts import render, redirect, get_object_or_404
from .models import Product
from .forms import ProductForm

# Create
def product_create(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('product_list')
    else:
        form = ProductForm()
    return render(request, 'products/product_form.html', {'form': form})

# Read
def product_list(request):
    products = Product.objects.all()
    return render(request, 'products/product_list.html', {'products': products})

# Update
def product_update(request, pk):
    product = get_object_or_404(Product, pk=pk)
    form = ProductForm(request.POST or None, instance=product)
    if form.is_valid():
        form.save()
        return redirect('product_list')
    return render(request, 'products/product_form.html', {'form': form})

# Delete
def product_delete(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.method == 'POST':
        product.delete()
        return redirect('product_list')
    return render(request, 'products/product_confirm_delete.html', {'product': product})

Step 7: Create Forms

Create a form for the Product model in forms.py:

# products/forms.py
from django import forms
from .models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['name', 'price', 'stock']

Step 8: Set Up URLs

Now, set up the URLs for the CRUD operations in urls.py:

# products/urls.py
from django.urls import path
from .views import product_list, product_create, product_update, product_delete

urlpatterns = [
    path('', product_list, name='product_list'),
    path('create/', product_create, name='product_create'),
    path('update/<int:pk>/', product_update, name='product_update'),
    path('delete/<int:pk>/', product_delete, name='product_delete'),
]

Include this app’s URLs in the main project’s urls.py:

# mycrudapp/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('products/', include('products.urls')),
]

Step 9: Create Templates

Create the necessary HTML templates for listing, creating, updating, and confirming deletion of products. Here’s a basic structure:

product_list.html

<h1>Product List</h1>
<a href="{% url 'product_create' %}">Add New Product</a>
<ul>
    {% for product in products %}
        <li>
            {{ product.name }} - ${{ product.price }} - Stock: {{ product.stock }}
            <a href="{% url 'product_update' product.pk %}">Edit</a>
            <a href="{% url 'product_delete' product.pk %}">Delete</a>
        </li>
    {% endfor %}
</ul>

product_form.html

<h1>{% if form.instance.pk %}Edit{% else %}Create{% endif %} Product</h1>
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Save</button>
</form>

product_confirm_delete.html

<h1>Delete Product</h1>
<p>Are you sure you want to delete "{{ product.name }}"?</p>
<form method="POST">
    {% csrf_token %}
    <button type="submit">Confirm</button>
</form>
<a href="{% url 'product_list' %}">Cancel</a>

Step 10: Run Your Application

Finally, run the development server to see your CRUD application in action:

python manage.py runserver

Visit http://127.0.0.1:8000/products/ in your browser, and you should see your product list. You can now create, read, update, and delete products!

Troubleshooting Common Issues

  • Django Not Found: Ensure Django is installed and correctly set up in your environment.
  • Database Errors: Check your migrations and ensure they’re applied with makemigrations and migrate.
  • Template Not Found: Ensure your templates are placed in a folder named templates/products within the products app.

Conclusion

Implementing a simple CRUD application with Django is an excellent way to familiarize yourself with the framework's core functionalities. By following these steps, you can build a functional application that allows users to manage data effectively. As you grow more comfortable with Django, consider exploring more advanced features like user authentication, RESTful APIs, and front-end frameworks. Happy coding!

SR
Syed
Rizwan

About the Author

Syed Rizwan is a Machine Learning Engineer with 5 years of experience in AI, IoT, and Industrial Automation.