Autocomplete Users With Django Grappelli

Posted by kim in Django

To get Grappelli’s autocomplete to work you need to implement the autocomplete_search_fields() for the model you would like to refer. To refer to the built in django.contrib.auth.models.User, you need to create a proxy class like this:


class MyUser(User):
	"""Proxy class for User to be able to implement autocomplete_search_fields for Grappelli"""
	@staticmethod
	def autocomplete_search_fields():
		return ("id__iexact", "username__icontains",)
	class Meta:
		proxy = True

class MyModel(models.Model):
	myusers = models.ManyToManyField(MyUser)

class MyModelAdmin(admin.ModelAdmin):
	raw_id_fields = ('myusers')
	autocomplete_lookup_fields = {
		'm2m': ['myusers'],
	}

admin.site.register(MyUser) # Important - don't forget this!
admin.site.register(MyModelAdmin)

The documentation is a bit unclear here, but in autocomplete_lookup_fields you should always use ‘m2m’ for many-to-many fields, and ‘fk’ for foreign keys.

Leave a Comment

Your email address will never be published or shared. Required fields are marked with an asterisk (*).