How to update object in Django

Key takeaways:

  • Learning to update objects in web applications is essential for maintaining data consistency and preventing duplication, especially in dynamic applications like content management and e-commerce platforms.

  • Our application uses Django to update book details, where users can modify the title and author via an intuitive form, with changes reflected seamlessly on the "View Book" page.

Learning how to update objects in a web application is a fundamental skill for developers because it ensures data consistency and allows users to modify existing records without creating duplicates. This capability is critical in dynamic applications, such as content management systems or e-commerce platforms, where information like product details or user profiles frequently changes. Mastering this process empowers developers to build more interactive and user-friendly applications, enhancing the overall user experience.

In this Answer, we explore a Django application designed to facilitate the management of book details. This application provides users with an intuitive interface for updating book information. By navigating to the “View Book” page and selecting the “Let’s update” button, users are redirected to the update page (update_book.html). On this page, users can modify the book’s title and author via a form. Following form submission, users are seamlessly redirected back to the “View Book” page, where the updated book details are displayed. This functionality streamlines the process of updating book records through the user interface.

1. The views.py file

This file defines Django views, which are responsible for handling different aspects of our application. In this case, it includes three views

The update_book view

Below is the code for the update_book function:

def update_book(request, book_id):
book = get_object_or_404(Book, pk=book_id)
print(book_id)
if request.method == 'POST':
book.title = request.POST['title']
book.author = request.POST['author']
book.save()
print(book_id);
return HttpResponseRedirect(reverse('myapp:view_book', args=[book.id]))
return render(request, 'myapp/update_book.html', {'book': book})
  • Line 2: This uses get_object_or_404 to retrieve a Book object based on its primary key (pk or book_id).

  • Lines 4–8: This handles both GET and POST requests. On a POST request, it updates the book’s title and author fields based on the form data received and saves the changes.

  • Line 9: This redirects to the view_book page for the updated book.

The view_book view

Below is the code for the view_book function:

def view_book(request, book_id):
book = get_object_or_404(Book, pk=book_id)
return render(request, 'myapp/view_book.html', {'book': book})
  • Line 2: This retrieves a Book object based on its primary key (pk or book_id).

  • Line 3: This renders a template (view_book.html) displaying the details of the book.

The my_view view

Below is the code for the my_view function:

def my_view(request):
return render(request, 'myapp/my_template.html')
  • Line 2: This is a placeholder view that renders a template (my_template.html). This view is not directly related to the update functionality.

2. The my_template.html file

Below is the code for the my_template.html file:

<!-- myapp/templates/myapp/my_template.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Template</title>
</head>
<body>
<h1>Home page</h1>
<a href="{% url 'myapp:view_book' book_id=1 %}">
<button>View Book</button>
</a>
</body>
</html>
  • Line 12: This template represents the home page and includes an anchor (<a>) element with a button that redirects to the view_book page for a book with book_id=1. We might want to replace 1 with a valid book ID based on our application’s data.

3. The update_book.html file

Below is the code for the update_book.html file:

<!-- myapp/templates/myapp/update_book.html -->
<!DOCTYPE html>
<html lang="en">
<body>
<h2>Update Book</h2>
<form method="post" action="{% url 'myapp:update_book' book.id %}">
{% csrf_token %}
<label for="title">Title:</label>
<input type="text" name="title" value="{{ book.title }}"><br>
<label for="author">Author:</label>
<input type="text" name="author" value="{{ book.author }}"><br>
<input type="submit" value="Update Book">
</form>
</body>
</html>
  • Lines 6–13: This template represents the page for updating a book. It includes a form that allows users to submit new values for the book’s title and author. The form’s action attribute is set to the update_book view for the specific book. It uses the book.id to dynamically generate the URL.

4. The view_book.html file

Below is the code for the view_book.html file:

<!-- myapp/templates/myapp/view_book.html -->
<h2>Book Details</h2>
<p>Title: {{ book.title }}</p>
<p>Author: {{ book.author }}</p>
<form method="GET" action="{% url 'myapp:update_book' book.id %}">
<button type="submit">Let's update</button>
</form>
<!-- Add more details as needed -->
  • Lines 7–9: This template displays the details of a book. It includes a button inside a form that redirects to the update_book page for the specific book when clicked. The form uses the GET method, and the button is set to type submit.

Steps to update a book

  1. Visit the home page (my_template.html) and click the “View Book” button.

  2. We’ll be redirected to the view_book page, where we can see the book details.

  3. On the view_book page, click the “Let’s update” button to navigate to the update_book page.

  4. On the update_book page, modify the title and author fields in the form.

  5. Click the “Update Book” button to submit the form.

  6. We’ll be redirected back to the view_book page, where we can see the updated book details.

Try it yourself

Press the “Run” button to see the working example of the above code:

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    """Run administrative tasks."""
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == "__main__":
    main()
Code to update object in django

Conclusion

In conclusion, this Django application offers a user-friendly method for managing and updating book details. Streamlining the update process through intuitive navigation and seamless redirects enhances the efficiency of record management. This approach not only simplifies user interactions but also ensures that book information remains current and accurately reflected.

Frequently asked questions

Haven’t found what you were looking for? Contact Us


How to update queryset in Django

To update a queryset in Django, you can use the update() method. This method takes keyword arguments, where the keyword is the field name and the value is the new value to be assigned.


How do I update in ORM?

To update an object using the ORM, you can retrieve the object and modify its attributes. Then, call the save() method to persist the changes to the database.


How to update in database in Django

While it’s generally recommended to use the ORM for database operations in Django, you can directly execute SQL queries using the raw() method if necessary. However, be cautious, as this approach bypasses the ORM’s safety and abstraction layers.


Free Resources

Copyright ©2025 Educative, Inc. All rights reserved