Skip to content

Instantly share code, notes, and snippets.

@egasimus
Created January 10, 2014 14:02
Show Gist options
  • Save egasimus/8352602 to your computer and use it in GitHub Desktop.
Save egasimus/8352602 to your computer and use it in GitHub Desktop.
Simple M2M filter for Django admin.
class M2MFilter(admin.SimpleListFilter):
title = _('yourm2mfield')
# Parameter for the filter that will be used in the URL query.
parameter_name = 'yourm2mfield'
def lookups(self, request, model_admin):
return ((x.pk, x.title) for x in YourRelatedModel.objects.all())
def value(self):
""" Splits a comma-separated string of PKs into a list of
integers. """
try:
values = [
int(pk) for pk in self.used_parameters.get(
self.parameter_name, '').split(',')]
except ValueError as e:
return []
else:
return values
def queryset(self, request, queryset):
""" Returns the filtered queryset based on the value provided
in the query string and retrievable via `self.value()`. """
value = self.value()
return queryset if value is None \
else queryset.filter(yourm2mfield__pk__in=value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment