Django admin: Change selected box of related fields to autocomplete

前端 未结 5 1416
有刺的猬
有刺的猬 2020-12-04 16:55

We have some models that are have a user as a foreign key. But with about 25000 users in our system, it\'s a bit daunting to find the one we need.

Is there a solutio

相关标签:
5条回答
  • 2020-12-04 17:25

    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:

    • django-autocomplete-light
    • django-extensions (ForeignKeyAutocompleteAdmin)
    • django-autocomplete (on google code)
    • django-ajax-selects
    • django-admin-autocomplete
    • django-autocomplete (tyrion)

    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.

    0 讨论(0)
  • 2020-12-04 17:36

    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.

    0 讨论(0)
  • 2020-12-04 17:39

    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 讨论(0)
  • 2020-12-04 17:46

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

    0 讨论(0)
  • 2020-12-04 17:49

    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']
    
    0 讨论(0)
提交回复
热议问题