Working with Models and Views

Working with Models and Views

Retrieving, Updating, and Deleting Data

Introduction

In this blog, we'll dive deeper into working with models and views. We'll learn how to retrieve data from models, create parameterized URLs, build dynamic links to access and manipulate data, and perform CRUD operations (Create, Read, Update, Delete) using forms and views.

Let's explore these concepts through an example-driven approach.

Retrieving Data from Models

In Django, we can retrieve data from models using queryset methods like .all(), .filter(), and .get(). Let's demonstrate how to retrieve all instances of a model and display them in a template.

Step 1: Creating a Path and View Function

First, let's create a path in the urls.py file to map to a view function in the views.py file.

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('example/', views.example_view, name='example'),
    path('example/<int:id>/', views.example_detail_view, name='example_detail'),
    path('create_example/', views.create_example_view, name='create_example'),
    path('delete_example/<int:id>/', views.delete_example_view, name='delete_example'),
]

Now, let's define the view function example_view in the views.py file to retrieve all instances of the ExampleModel model and pass them to a template.

# views.py

from django.shortcuts import render
from .models import ExampleModel

def example_view(request):
    examples = ExampleModel.objects.all()
    return render(request, 'example_template.html', {'examples': examples})

Step 2: Creating a Template

Next, let's create a template named example_template.html to display the retrieved data.

<!-- example_template.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Example Data</title>
</head>
<body>
    <h1>Example Data</h1>
    <ul>
        {% for example in examples %}
            <li>
                <a href="{% url 'example_detail' example.id %}">{{ example.name }}</a>
                - {{ example.description }}
                <form action="{% url 'delete_example' example.id %}" method="post">
                    {% csrf_token %}
                    <input type="submit" value="Delete">
                </form>
            </li>
        {% endfor %}
    </ul>
    <form action="{% url 'create_example' %}" method="post">
        {% csrf_token %}
        <input type="text" name="name" placeholder="Name">
        <input type="text" name="description" placeholder="Description">
        <input type="submit" value="Create">
    </form>
</body>
</html>

Step 3: Creating View Functions for CRUD Operations

Now, let's define view functions for creating and deleting instances of the ExampleModel model.

# views.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import ExampleModel

def create_example_view(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        description = request.POST.get('description')
        data = ExampleModel(name=name, description=description)
        data.save()
        return redirect('example')
    return render(request, 'create_example_template.html')

def delete_example_view(request, id):
    example = get_object_or_404(ExampleModel, id=id)
        example.delete()
        return redirect('example')

In these view functions:

  • create_example_view: Creates a new instance of ExampleModel using data from the POST request.

  • delete_example_view: Deletes the instance of ExampleModel with the specified ID.

Conclusion

In this blog post, we've explored how to retrieve data from models, create parameterized URLs, build dynamic links, and perform CRUD operations using forms and views in Django applications. By following these steps, you can effectively work with models and views to build dynamic web applications.

Stay tuned for the next blog, where we'll delve deeper into advanced techniques for managing data in Django applications.

Happy coding!