Skip to content

Instantly share code, notes, and snippets.

I may be slow to respond.

David Cramer dcramer

I may be slow to respond.
View GitHub Profile
A two-part middleware which modifies request.COOKIES and adds a set and delete method.
`set` matches django.http.HttpResponse.set_cookie
`delete` matches django.http.HttpResponse.delete_cookie
# usage: python <> help -- downloads the files to the current directory
# requires libmpq
# Attempts to brute force and download specific patches
# e.g. python --current= --next=
# This would find and download any patches relevant, the next argument is optional,
# but allows you to provide a starting point. This stops at the first patch it finds,
# so you would need to continue with a new starting point if you wanted a different patch.
# e.g. if you didnt specify next in this example, it would stop at the initial 0.11 build,
# which wasnt publicly released
View comments-count-sample.html
<title>Comments count code example</title>
<!-- For this link, we will try to fetch comments count by URL: -->
<a href="">First article</a>
<!-- For this link, we will try to fetch comments count by identifier: article2identifier -->
View gist:550435
def queryset_to_dict(qs, key='pk'):
Given a queryset will transform it into a dictionary based on ``key``.
return dict((getattr(u, key), u) for u in qs)
def distinct(l):
Given an iterable will return a list of all distinct values.
View gist:550436
diff --git a/django_root/django/db/models/ b/django_root/django/db/models/
index 37331b3..4da2802 100644
--- a/django_root/django/db/models/
+++ b/django_root/django/db/models/
@@ -5,6 +5,7 @@ from itertools import izip
import django.db.models.manager # Imported to register signal handler.
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS
from django.core import validators
+from django.db.models.expressions import ExpressionNode
from django.db.models.fields import AutoField, FieldDoesNotExist
View gist:550438
class QuerySetDoubleIteration(Exception):
"A QuerySet was iterated over twice, you probably want to list() it."
# "Skinny" here means we use iterator by default, rather than
# ballooning in memory.
class SkinnyManager(Manager):
def get_query_set(self):
return SkinnyQuerySet(self.model, using=self._db)
def attach_foreignkey(objects, field, select_related=None):
Shortcut method which handles a pythonic LEFT OUTER JOIN.
``attach_foreignkey(posts, Post.thread)``
field = field.field
qs =, field.column) for o in objects))
if select_related:
qs = qs.select_related(*select_related)
dcramer /
Created Dec 6, 2010
Tracking changes on properties in Django
from django.db.models.signals import post_init
def track_data(*fields):
Tracks property changes on a model instance.
The changed list of properties is refreshed on model initialization
and save.
>>> @track_data('name')
from threading import local
_blah = local()
class StopThatShit(Exception):
def patch():
from django.db.backends import util
from django import template
dcramer /
Created Mar 24, 2011
Django Debug Toolbar On-Demand
from django.conf import settings
from django.conf.urls.defaults import include, patterns
from django.http import HttpResponse
from django.utils.encoding import smart_unicode
if 'debug_toolbar' not in settings.INSTALLED_APPS:
class DebugMiddleware(object):
import debug_toolbar.urls