| web | http://simonwillison.net/ |
|---|---|
| Author |
July 13, 2025 » Simon Willison's Weblog: django » [Archived Version]
Today is the 20th anniversary of the first commit to the public Django repository! Ten years ago we threw a multi-day 10th birthday party for Django back in its birthtown of Lawrence, Kansas. As a personal celebration of the 20th, I'm revisiting the talk I gave at that event and writing it up here. Here's the YouTube video. Below is a full transcript, plus my slides and some present-day annotations. Django Origins (and some things I have built with Django) Presented 11th July 2015 at Django…
Read MoreJuly 11, 2025 » Simon Willison's Weblog: django » [Archived Version]
Following the widespread availability of large language models (LLMs), the Django Security Team has received a growing number of security reports generated partially or entirely using such tools. Many of these contain inaccurate, misleading, or fictitious content. While AI tools can help draft or analyze reports, they must not replace human understanding and review. If you use AI tools to help prepare a report, you must: Disclose which AI tools were used and specify what they were used for (an…
Read MoreJuly 11, 2025 » Simon Willison's Weblog: django » [Archived Version]
Following the widespread availability of large language models (LLMs), the Django Security Team has received a growing number of security reports generated partially or entirely using such tools. Many of these contain inaccurate, misleading, or fictitious content. While AI tools can help draft or analyze reports, they must not replace human understanding and review. If you use AI tools to help prepare a report, you must: Disclose which AI tools were used and specify what they were used for (an…
Read MoreJune 3, 2025 » Simon Willison's Weblog: django » [Archived Version]
PR #537: Fix Markdown in og descriptions Since OpenAI Codex is now available to us ChatGPT Plus subscribers I decided to try it out against my blog. It's a very nice implementation of the GitHub-connected coding "agent" pattern, as also seen in Google's Jules and Microsoft's Copilot Coding Agent. First I had to configure an environment for it. My Django blog uses PostgreSQL which isn't part of the default Codex container, so I had Claude Sonnet 4 help me come up with a startup recipe to get Pos…
Read MoreJune 3, 2025 » Simon Willison's Weblog: django » [Archived Version]
PR #537: Fix Markdown in og descriptions Since OpenAI Codex is now available to us ChatGPT Plus subscribers I decided to try it out against my blog. It's a very nice implementation of the GitHub-connected coding "agent" pattern, as also seen in Google's Jules and Microsoft's Copilot Coding Agent. First I had to configure an environment for it. My Django blog uses PostgreSQL which isn't part of the default Codex container, so I had Claude Sonnet 4 help me come up with a startup recipe to get Pos…
Read MoreMay 17, 2025 » Simon Willison's Weblog: django » [Archived Version]
django-simple-deploy Eric Matthes presented a lightning talk about this project at PyCon US this morning. "Django has a deploy command now". You can run it like this: pip install django-simple-deploy[fly_io] # Add django_simple_deploy to INSTALLED_APPS. python manage.py deploy --automate-all It's plugin-based (inspired by Datasette!) and the project has stable plugins for three hosting platforms: dsd-flyio, dsd-heroku and dsd-platformsh. Currently in development: dsd-vps - a plugin that should…
Read MoreMay 17, 2025 » Simon Willison's Weblog: django » [Archived Version]
django-simple-deploy Eric Matthes presented a lightning talk about this project at PyCon US this morning. "Django has a deploy command now". You can run it like this: pip install django-simple-deploy[fly_io] # Add django_simple_deploy to INSTALLED_APPS. python manage.py deploy --automate-all It's plugin-based (inspired by Datasette!) and the project has stable plugins for three hosting platforms: dsd-flyio, dsd-heroku and dsd-platformsh. Currently in development: dsd-vps - a plugin that should…
Read MoreApril 10, 2025 » Simon Willison's Weblog: django » [Archived Version]
Django: what’s new in 5.2 Adam Johnson provides extremely detailed unofficial annotated release notes for the latest Django. I found his explanation and example of Form BoundField customization particularly useful - here's the new pattern for customizing the class= attribute on the label associated with a CharField: from django import forms class WideLabelBoundField(forms.BoundField): def label_tag(self, contents=None, attrs=None, label_suffix=None): if attrs is None: …
Read MoreApril 10, 2025 » Simon Willison's Weblog: django » [Archived Version]
Django: what’s new in 5.2 Adam Johnson provides extremely detailed unofficial annotated release notes for the latest Django. I found his explanation and example of Form BoundField customization particularly useful - here's the new pattern for customizing the class= attribute on the label associated with a CharField: from django import forms class WideLabelBoundField(forms.BoundField): def label_tag(self, contents=None, attrs=None, label_suffix=None): if attrs is None: …
Read MoreApril 2, 2025 » Simon Willison's Weblog: django » [Archived Version]
Composite primary keys in Django Django 5.2 is out today and a big new feature is composite primary keys, which can now be defined like this: class Release(models.Model): pk = models.CompositePrimaryKey( "version", "name" ) version = models.IntegerField() name = models.CharField(max_length=20) They don't yet work with the Django admin or as targets for foreign keys. Other smaller new features include: All ORM models are now automatically imported into ./manage.py shell…
Read More