Select2 on explicit through model in Django admin

Viewed 17

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.

0 Answers
Related