[Django]-Django admin: Change selected box of related fields to autocomplete

38👍

I had this problem and my conclusion was to use an autocomplete field instead. It works pretty well in most cases. The only problem is when you have a lot of entries that are mostly the same. For example, in your case, if you type Robert for the name and there’s a few hundred Robert entries in the list…

UPDATE

As mentions in shuckc’s answer, Django 2.0+ admin as now autocomplete built in.

For older Django or to use outside of the admin (old answer)

There are many apps that add autocomplete to the Django admin:

My preferred one is the last one. It’s well written, it can be used with the admin and outside of the admin, it works with ManyToManyFields, ForeignKeyFields, CharFields, etc.

I did a fork of this project for my client that adds some niceties like a lookup (loupe) button like the ForeignKeyRawIdWidget.

31👍

Django 2.0 admin has autocomplete built in, just set the autocomplete_fields field on the ModelAdmin class. e.g.

class QuestionAdmin(admin.ModelAdmin):
    ordering = ['date_created']
    search_fields = ['question_text']

class ChoiceAdmin(admin.ModelAdmin):
    autocomplete_fields = ['question']
👤shuckc

7👍

The simplest out-of-the-box solution is to add the field to your ModelAdmin‘s raw_id_fields — then you’ll get a pop-up window in which you can use the built-in searching/filtering and pagination control’s to find and select the object you’re after.

If you really want autocomplete, the other answers give a you reasonable starting point.

4👍

You can use the ForeignKeyRawIdWidget from django.contrib.admin.widgets. It renders FK relations as an input with a small button along-side which presents a searchable pop up.

0👍

There is an app for that (django-autocomplete).

Leave a comment