Using autocomplete_fields/search_fields in Django's admin works well to cause a Select2 widget to be used for a ForeignKey field, but I'm getting an error when I set things up to have Select2 widgets rendered on a declared through model in a ManyToManyField relationship. My models are different than the following, but using the example from the Django docs where through models in the admin are discussed as a starting point, I have things set up something like this (the example in the docs has an implicit through model, but I have an explicitly declared through model):
class Person(models.Model):
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership', related_name='groups')
class Membership(models.Model):
person = models.ForeignKey('Person', ...)
group = models.ForeignKey('Group', ...)
and in admin.py:
class PersonAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
search_fields = ('first_name','last_name,)
class MembershipInline(admin.TabularInline):
model = Membership
autocomplete_fields = ('person',)
class GroupAdmin(admin.ModelAdmin):
inlines = [MembershipInline,]
When I go to the GroupAdmin and try to create a membership, the Select2 widget is rendered, but when I try to look up a person, I get this error:
Forbidden (Permission denied): /admin/autocomplete/
Traceback (most recent call last):
File "/virtualenvs/my_virtualenv/lib/python3.8/site-packages/django/utils/datastructures.py", line 84, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'app_label'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/virtualenvs/my_virtualenv/lib/python3.8/site-packages/django/contrib/admin/views/autocomplete.py", line 79, in process_request
app_label = request.GET["app_label"]
File "/virtualenvs/my_virtualenv/lib/python3.8/site-packages/django/utils/datastructures.py", line 86, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'app_label'
I am using django-jazzmin, so the problem COULD be caused by it, but the Select2 widgets work fine in ForeignKey relationships that are not part of a through model. Someone encountered something similar in Grappelli a year ago, but I can't tell whether this problem is similar.
Any help is very much appreciated.