This error occurs in the Admin for my custom user when I try to specify a custom widget for permission groups. I haven't included 'groups' in any raw_id_fields, radio_fields or autocomplete_fields. The groups are correctly displayed in the Admin user page with the default FilteredSelectMultiple widget.

This is the relevant code in admin.py ... (traceback below)

class CommonUserAdmin(UserAdmin):

    model = get_user_model()

    def formfield_for_manytomany(self, db_field, request, **kwargs):

        if db_field.name == "groups":
            formfield_overrides = {
                models.ManyToManyField: {'widget': CommonFilteredSelectMultiple},
            }
    ...

If I omit the formfield_for_manytomany() method and just run formfield_overrides nakedly nothing happens - presumably because the admin doesn't consider "groups" is a ManyToManyField at that point.

How do I persuade the Admin to use my widget?

Thanks for any advice

Mike



Environment:


Request Method: GET
Request URL: http://localhost:8000/admin/common/user/59/change/

Django Version: 2.2.9
Python Version: 3.7.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.staticfiles',
 'common',
 'billing',
 'company',
 'credit',
 'refer',
 'regulation',
 'substance',
 'workplace']
Installed Middleware:
['django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.contrib.admindocs.middleware.XViewMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'pwned_passwords_django.middleware.PwnedPasswordsMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware']


Template error:
In template D:\Users\mike\envs\xxex3\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 7    Key 'groups' not found in 'UserForm'. Choices are: email, first_name, is_active, is_staff, last_name, password, username.
   1 : <fieldset class="module aligned {{ fieldset.classes }}">
   2 :     {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
   3 :     {% if fieldset.description %}
   4 :         <div class="description">{{ fieldset.description|safe }}</div>
   5 :     {% endif %}
   6 :     {% for line in fieldset %}
   7 :         <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %} {% for field in line %} {% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">    8 :             {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>    11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly">{{ field.contents }}</div>


Traceback:

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\forms\forms.py" in __getitem__
  163.             field = self.fields[name]

During handling of the above exception ('groups'), another exception occurred:

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\core\handlers\base.py" in _get_response   145.                 response = self.process_exception_by_middleware(e, request)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\core\handlers\base.py" in _get_response
  143.                 response = response.render()

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  171.                     return self._render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\defaulttags.py" in render
  209. nodelist.append(node.render_annotated(context))

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\loader_tags.py" in render
  188.             return template.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  173.                 return self._render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\defaulttags.py" in render
  209. nodelist.append(node.render_annotated(context))

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\template\defaulttags.py" in render
  165.                 values = list(values)

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\contrib\admin\helpers.py" in __iter__   113.                 yield AdminField(self.form, field, is_first=(i == 0))

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\contrib\admin\helpers.py" in __init__   125.         self.field = form[field]  # A django.forms.BoundField instance

File "D:\Users\mike\envs\xxex3\lib\site-packages\django\forms\forms.py" in __getitem__
  169.                     ', '.join(sorted(f for f in self.fields)),

Exception Type: KeyError at /admin/common/user/59/change/
Exception Value: "Key 'groups' not found in 'UserForm'. Choices are: email, first_name, is_active, is_staff, last_name, password, username."

--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/66960ebe-c100-94f1-a515-75641451af99%40dewhirst.com.au.

Reply via email to