41554 blogs · [ { "id": "01a0878f-8a27-70a6-ace0-50d8a039026e", "title": "Django Custom Managers Are Silently Leaking Data", "url": "https://johnnymetz.com/posts/django-custom-managers-data-leak/", "published_at": "2026-03-22T07:12:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a1305752", "title": "Django Time-Based Lookups: A Performance Trap", "url": "https://johnnymetz.com/posts/django-time-based-lookups-performance/", "published_at": "2026-01-19T07:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a227c116", "title": "Avoiding Duplicate Objects in Django Querysets", "url": "https://johnnymetz.com/posts/avoiding-duplicate-objects-in-django-querysets/", "published_at": "2026-01-03T07:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a28e03db", "title": "7 Heroku Features Every Developer Should Be Using", "url": "https://johnnymetz.com/posts/heroku-features-you-should-be-using/", "published_at": "2025-09-13T18:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a2e1e7df", "title": "The Django db_default Gotcha That Breaks Your Code", "url": "https://johnnymetz.com/posts/django-db-default-gotcha/", "published_at": "2025-08-03T20:46:58+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a32548b8", "title": "Stop Using Django's squashmigrations: There's a Better Way", "url": "https://johnnymetz.com/posts/squash-django-migrations/", "published_at": "2025-07-27T00:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a3feaf40", "title": "Speed Up Django Queries with values() over only()", "url": "https://johnnymetz.com/posts/django-values-over-only/", "published_at": "2025-06-29T20:11:26+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a4603e95", "title": "Avoiding PostgreSQL Pitfalls: The Hidden Cost of Failing Inserts", "url": "https://johnnymetz.com/posts/postgresql-failing-insert/", "published_at": "2025-06-16T01:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a463fa17", "title": "Disable Redundant Gunicorn Access Logs on Heroku", "url": "https://johnnymetz.com/posts/disable-gunicorn-access-logs/", "published_at": "2024-11-25T20:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a55a361f", "title": "5 Ways to Get the Latest Book Per Author in Django", "url": "https://johnnymetz.com/posts/latest-book-per-author/", "published_at": "2024-11-14T19:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a6336724", "title": "Zero Downtime Django Deployments with Multistep Database Changes", "url": "https://johnnymetz.com/posts/multistep-database-changes/", "published_at": "2024-10-27T19:00:00+00:00" }, { "id": "01a0878f-8a27-70a6-ace0-50d8a656f009", "title": "Mastering Code Search with JetBrains Scope", "url": "https://johnnymetz.com/posts/jetbrains-scope/", "published_at": "2023-09-30T14:55:29+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549c944475", "title": "Supercharge Your Django App: 7 Sneaky Tricks to Crush Slow Database Queries", "url": "https://johnnymetz.com/posts/slow-django-database-queries/", "published_at": "2023-08-13T16:15:13+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549ca82fc8", "title": "Optimize Django Query Performance by combining Select Related and Prefetch Related", "url": "https://johnnymetz.com/posts/combine-select-related-prefetch-related/", "published_at": "2023-05-13T19:48:39+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549d34a8ed", "title": "Free up disk space with Docker prune", "url": "https://johnnymetz.com/posts/docker-prune/", "published_at": "2023-01-21T19:11:25+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549d975183", "title": "[Cross-Post] Django performance: Sort by a Custom Order", "url": "https://johnnymetz.com/posts/sort-django-queryset-by-custom-order/", "published_at": "2023-01-03T01:00:00+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549e36572b", "title": "Disable a direct push to GitHub main branch", "url": "https://johnnymetz.com/posts/disable-direct-push-to-main-branch/", "published_at": "2022-12-29T18:36:08+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549e987dd2", "title": "Using Hadolint, a Dockerfile linter, To Enforce Best Practices", "url": "https://johnnymetz.com/posts/hadolint/", "published_at": "2022-03-18T02:32:01+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549f201f83", "title": "Dockerize a Next.js app using multi-stage builds", "url": "https://johnnymetz.com/posts/dockerize-nextjs-app/", "published_at": "2022-02-26T09:14:31+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549fc475a5", "title": "Dockerize your Cypress tests", "url": "https://johnnymetz.com/posts/dockerize-your-cypress-tests/", "published_at": "2022-02-01T05:08:44+00:00" }, { "id": "01a0878f-8a28-7267-9278-c6549fe0a59e", "title": "Free up Django CPU usage in Docker with Watchman", "url": "https://johnnymetz.com/posts/free-up-django-cpu-usage-in-docker-with-watchman/", "published_at": "2022-01-05T07:27:56+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a07bc2bb", "title": "Set Django Model Field Choices in your Frontend the Right Way", "url": "https://johnnymetz.com/posts/set-django-model-field-choices-in-frontend/", "published_at": "2021-12-01T18:31:13+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a0f1c790", "title": "5 ways to get all Django objects with a related object", "url": "https://johnnymetz.com/posts/five-ways-to-get-django-objects-with-a-related-object/", "published_at": "2021-10-01T20:08:48+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a1cb36db", "title": "Why you need to use Subqueries in Django", "url": "https://johnnymetz.com/posts/why-you-need-to-use-django-subqueries/", "published_at": "2021-07-21T18:56:09+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a201fa4a", "title": "Check your Django Migrations on every commit", "url": "https://johnnymetz.com/posts/check-django-migrations/", "published_at": "2021-05-08T19:10:47+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a299c7ae", "title": "Find all N+1 violations in your Django app", "url": "https://johnnymetz.com/posts/find-nplusone-violations/", "published_at": "2021-04-14T07:10:50+00:00" }, { "id": "01a0878f-8a28-7267-9278-c654a31b48e4", "title": null, "url": "https://johnnymetz.com/about/", "published_at": null }, { "id": "01a0878f-8a28-7267-9278-c654a3414e29", "title": "Subscribe", "url": "https://johnnymetz.com/subscribe/", "published_at": null } ] posts Claim your blog
Back to Johnny Metz
Blog · corpus.blog/blogs/johnnymetz.com/posts

Johnny Metz

johnnymetz.com

2026

2025

2024

2023

2022

2021

Undated