Model
2019

How to Switch to a Custom Django User Model Mid-Project
The Django documentation recommends always starting your project with a custom user model (even if it's identical to Django's to begin with), to make it easier to customize later if you need to. But what are you supposed to do if you didn't see this when starting a project, or if you inherited a project without a custom user model and you need to add one?
2015

Using Unsaved Related Models for Sample Data in Django 1.8
Note: In between the time I originally wrote this post and it
getting published, a
ticket and pull
request were opened in
Django to remove allow_unsaved_instance_assignment
and move validation
to the model save()
method, which makes much more sense anyways. It's
likely this will even be backported to Django 1.8.4. So, if you're
using a version of Django that doesn't require this, hopefully you'll
never stumble across this post in the first place! If this is still an
issue for you, here's the original post:
2013

Migrating to a Custom User Model in Django
UPDATE: Read a newer blog post on this topic.
The new custom user model
configuration
that arrived in Django makes it relatively straightforward to swap in
your own model for the Django user model. In most cases, Django's
built-in User
model works just fine, but there are times when certain
limitations (such as the length of the email
field)
require a custom user model to be installed. If you're starting out
with a custom user model, setup and configuration are relatively
straightforward, but if you need to migrate an existing legacy project
(e.g., one that started out in Django 1.4 or earlier), there are a few
gotchas that you might run into. We did this recently for one of our
larger, long-term client projects at Caktus, and here's an outline of
how we'd recommend tackling this issue:

2012

Django Fundamentals Bootcamp Recap
On June 8th and 9th, Caktus hosted its first Django Fundamentals Bootcamp. The Caktus team developed the idea for the course, which was a crossword drill application, and has been developing the structure and content of the course over the past year. The bootcamp was designed to teach programmers who have experience in programming with different languages and introduce them to the fundamentals of building a web application with Django. We created an interactive environment where the instructors and students were able to communicate with one another which solved the issue of how to begin developing in an unfamiliar language.
2011

OpenBlock Geocoder, Part 1: Data Model and Geocoding
As Tobias mentioned in Scraping Data and Web Standards, Caktus is collaborating with the UNC School of Journalism to help develop Open Rural (the code is on GitHub). Open Rural hopes to help rural newspapers in North Carolina leverage OpenBlock. This blog post is the first of several covering the internals of OpenBlock and, specifically, the geocoder.
2010

Simplifying the Testing of Unmanaged Database Models in Django (Updated for Django 4.2 in 2024)
Editor's note: This post was originally published in September, 2010 and was updated in December, 2024 to incorporate changes in Django and improvements suggested by our readers. It has also been tested for compatibility as of the Django 4.2 release.
2009

Creating recursive, symmetrical many-to-many relationships in Django
In Django, a recursive many-to-many relationship is a ManyToManyField
that points to the same model in which it's defined ('self')
. A
symmetrical relationship is one in where, when a.contacts = [b]
, a is
in b.contacts
.

Migrating from django-photologue 1.x to 2.x
We're in the process of updating a web app for a client that was built last year about this time using Django and Photologue. Needless to say, there have been a lot of changes to both over the past year!

Why Caktus Uses Django
Here at Caktus, we use the popular Django web framework for a lot of our custom web application development. We don't use Django simply because it's popular, easy to learn, or happened to be the first thing we found. We've written web apps in PHP, Java, and Ruby on Rails--all before we discovered Django--but were never quite satisfied. Following are just a few of the reasons that we both enjoy working with Django and believe it gives you (the client) the best end-product.