Exploring the Exciting New Features of Django 5.0

Akshat Gadodia
4 min readOct 8, 2023

--

Django, the popular Python web framework, is all set to release its latest version, Django 5.0, in December 2023. With each new release, Django continues to evolve, bringing new features and improvements to make web development even more efficient and enjoyable. In this blog post, we’ll dive into the exciting new features that Django 5.0 has to offer.

Python Compatibility

Django 5.0 proudly supports Python 3.10, 3.11, and 3.12, ensuring that developers can leverage the latest Python features and enhancements. It’s highly recommended to use the latest release of Python for the best experience.

Facet Filters in the Admin

Managing data in the Django admin interface is now easier than ever with the introduction of facet filters. When toggled on via the UI, facet counts are displayed for applied filters in the admin changelist. This feature can be customized using the new `ModelAdmin.show_facets` attribute, providing users with a more intuitive way to filter and explore data.

Simplified Templates for Form Field Rendering

Django 5.0 introduces the concept of a “field group” and field group templates, streamlining the rendering of Django form fields. This simplification significantly reduces the amount of HTML and template code needed to render form elements, making your templates cleaner and more maintainable.

For example, the template below:

<form>
...
<div>
{{ form.name.label_tag }}
{% if form.name.help_text %}
<div class="helptext" id="{{ form.name.id_for_label }}_helptext">
{{ form.name.help_text|safe }}
</div>
{% endif %}
{{ form.name.errors }}
{{ form.name }}
<div class="row">
<div class="col">
{{ form.email.label_tag }}
{% if form.email.help_text %}
<div class="helptext" id="{{ form.email.id_for_label }}_helptext">
{{ form.email.help_text|safe }}
</div>
{% endif %}
{{ form.email.errors }}
{{ form.email }}
</div>
<div class="col">
{{ form.password.label_tag }}
{% if form.password.help_text %}
<div class="helptext" id="{{ form.password.id_for_label }}_helptext">
{{ form.password.help_text|safe }}
</div>
{% endif %}
{{ form.password.errors }}
{{ form.password }}
</div>
</div>
</div>
...
</form>

This can now be simplified to:

<form>
...
<div>
{{ form.name.as_field_group }}
<div class="row">
<div class="col">{{ form.email.as_field_group }}</div>
<div class="col">{{ form.password.as_field_group }}</div>
</div>
</div>
...
</form>

Database-Computed Default Values

Setting database-computed default values for model fields is now easier with the new `Field.db_default` parameter. This feature allows you to define default values using database functions, providing greater flexibility and precision when defining model defaults.

For Example:

from django.db import models
from django.db.models.functions import Now, Pi


class MyModel(models.Model):
age = models.IntegerField(db_default=18)
created = models.DateTimeField(db_default=Now())
circumference = models.FloatField(db_default=2 * Pi())

Database Generated Model Field

The new `GeneratedField` empowers developers to create database-generated columns in Django models. This field can compute its value based on other fields in the model, simplifying complex calculations and ensuring data integrity at the database level.

For Example:

from django.db import models
from django.db.models import F


class Square(models.Model):
side = models.IntegerField()
area = models.GeneratedField(expression=F("side") * F("side"), db_persist=True)

More Options for Declaring Field Choices

Django 5.0 enhances the flexibility of declaring field choices. You can now use a mapping or a callable instead of an iterable, making it easier to define choices for model and form fields. This update simplifies the management of choices and allows for more dynamic options.

Minor Features

Django 5.0 brings a multitude of minor features and improvements across various parts of the framework. Some noteworthy updates include enhancements to the admin site, asynchronous authentication functions, extended support for geospatial operations, improvements in messages handling, and much more.

Backwards Incompatible Changes

While Django 5.0 introduces exciting new features, it’s essential to be aware of the backwards incompatible changes. These changes may require adjustments in your codebase, so be sure to review them in the release notes to ensure a smooth transition.

Features Deprecated in 5.0

Additionally, Django 5.0 marks the deprecation of certain features. These features are scheduled to be removed in future releases, so it’s advisable to update your code accordingly to maintain compatibility.

Features Removed in 5.0

Some features that were deprecated in previous versions have reached the end of their deprecation cycle and have been removed in Django 5.0. It’s crucial to check if your code relies on any of these features and update it accordingly.

For more detailed information about the release notes and changes in Django 5.0, you can visit the official Django documentation page:

Read the complete Django 5.0 release notes here

This documentation provides an in-depth look at all the new features, backward incompatible changes, deprecations, and more that are part of Django 5.0. It’s a valuable resource for developers looking to understand the finer details of this release.

Conclusion

Django 5.0 promises to be an exciting release with a host of new features and improvements that will benefit developers and streamline web development processes. As the release date approaches, make sure to familiarize yourself with these changes to take full advantage of Django’s capabilities. Whether you’re building a new project or upgrading an existing one, Django 5.0 has something exciting in store for you. Stay tuned for the release in December 2023 and start exploring these fantastic new features!

I believe that this comprehensive guide to Django 5.0 serves as a valuable resource to help developers stay up to date. If you have suggestions to enhance its quality, please don’t hesitate to share.

Thank You

--

--

Akshat Gadodia

Web developer mastering Node.js, Django, React.js. Proficient in Docker, AI. Passionate about tech, sharing insights.