Caktus Blog

Insights and strategies from a team recognized at Python and Django conferences worldwide since 2009. The Caktus Blog is your space for practical how-to’s, real-world solutions, and expert advice on building better user experiences, strengthening quality assurance, solving deep and complex Python/Django problems, and managing projects that deliver impact. Whether you’re refining a UI or prepping for launch, join us to learn, level up, and lead with confidence.

2025


Handling Configuration and Server Snippets When Upgrading to ingress-nginx 1.12.0

As part of our ongoing Sustainability and Maintenance efforts, we are upgrading our Kubernetes clusters to version 1.32. Much like a major Django upgrade, this process requires us to update other key components to ensure they remain compatible. One of these is the ingress-nginx controller, which manages external access to the cluster.

Avoiding Timezone Traps: Correctly Extracting Date/Time Subfields in Django with PostgreSQL

Working with timezones can sometimes lead to confusing results, especially when combining Django's ORM, raw SQL for performance (like in PostgreSQL materialized views), and specific timezone requirements. I recently had an issue while aggregating traffic stop data by year, where all yearly calculations needed to reflect the 'America/New_York' (EST/EDT) timezone, even though our original data contained timestamp with time zone fields. We were using django-pgviews-redux to manage materialized views, and I mistakenly attempted to apply timezone logic to a date field that had no time or timezone information.

How to Migrate your Python & Django Projects to uv

Editor’s note: This post was updated on July 17th, 2025, to use the PATH_add hook for direnv and to recommend including uv sync --locked in your .envrc file.

cover-djangocon-europe-2025-highlights.jpg

DjangoCon Europe 2025 Highlights

Three Cakti recently attended DjangoCon Europe 2025 in Dublin and it was a wonderful experience! It was great to see and chat with various Django community members we usually only see once or twice a year. Beyond that, we were most impressed by the consistently high quality of the talks throughout all three days of the conference. It was a pleasure to listen to so many excellent presentations, including the lightning talks at the end of each day. Here are some of our favorite talks.

cover-chicago-local-part-2.jpeg

Chicago Like a Local: Part 2

Chicago Like a Local: Hidden Gems & Unique Experiences (Part 2)

DjangoCon US 2025 is getting closer, and while we’ve covered some classic must-see spots in Part 1, there’s so much more to explore beyond the typical tourist attractions. If you’re looking for unique experiences, quirky hidden gems, and places where locals actually hang out, this guide is for you.

Tips for Tracking Django Model Changes with django-pghistory

Django and its admin interface are a big part of why Caktus uses Django, but the admin's ability to log database changes is limited. For example, it shows only changes made via the Django admin, not via other parts of the site.

cover-cakti-share-their-favorite-tools-for-streamlined-worklows.jpg

Cakti Share Their Favorite Tools For Streamlined Workflows

Let’s jump into it!

At Caktus, we’re always looking for tools that help us streamline our workflows, increase productivity, and make our day-to-day tasks more efficient. Whether you’re managing projects, writing code, or debugging, the right tools can make all the difference. Here are some of our favorite tools that we love using to get the job done!

cover-upgrade-smarter-not-harder-python-tools-code-modernization.jpg

Upgrade Smarter, Not Harder: Python Tools for Code Modernization

Upgrading projects is somewhat equivalent to flossing, you know you have to do it, but rarely make time for it. After all, if the project is in active development, there are exciting new features to build. And we all know that new features > project upgrades. Well not to worry, Caktus wants to make you aware of some tools that will save you from considerable repetitive work & time while simultaneously modernizing your codebase. Combined, these tools will automate part of the upgrade process, decreasing the likelihood of neglecting parts of the codebase.

How to Use regexp_matches and regexp_match in PostgreSQL

Introduction

regexp_matches() and regexp_match() are two similar string functions that support regular expression matching directly in the PostgreSQL database. regexp_matches() was added in PostgreSQL 8.3, and regexp_match() was added in PostgreSQL 10 (keep reading to see how ChatGPT struggled to answer this question).

How to Create a Helm Chart for a Django App

At Caktus, we use Helm charts to simplify our deployment process for Django projects. Helm is a package manager for Kubernetes, and using Helm charts allows us to automate the process of writing Kubernetes configuration files for our Django applications. We use it together with GitHub Actions and Ansible to streamline our deployment processes.