#35198: Django Admin "Show counts" Feature Triggers Exception in a Custom Filter
-----------------------------------------+------------------------
               Reporter:  Simon Alef     |          Owner:  nobody
                   Type:  Bug            |         Status:  new
              Component:  contrib.admin  |        Version:  5.0
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 Description:
 Our Django application defines a relational model where Customer entities
 have a one-to-many relationship with Contracts, and Contract entities have
 a one-to-many relationship with Rental Items. A custom admin filter
 (RentalItemsFilter) was implemented on the Customer model to enable
 filtering based on the presence of active Rental Items.

 Issue:
 Using the "show counts" feature within the RentalItemsFilter on the
 Customer admin page to display counts of devices (Rental Items) associated
 with each customer through contracts triggers an exception.

 Steps to Reproduce:
 Load fixtures from fixture.json
 Go to the Django admin dashboard and navigate to the Customer model
 section.
 Click on "Show counts".



 {{{
 Traceback:
 Request Method: GET
 Request URL: http://127.0.0.1:8000/admin/demo/customer/?_facets=True

 Django Version: 5.0.2
 Python Version: 3.11.7
 Installed Applications:
 ['django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'demo']
 Installed Middleware:
 ['django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware']


 Template error:
 In template /django_bug_report/.venv/lib/python3.11/site-
 packages/django/contrib/admin/templates/admin/change_list.html, error at
 line 87
    no such column: demo_rentalitem.id
    77 :             <h2>{% translate 'Filter' %}</h2>
    78 :             {% if cl.is_facets_optional or cl.has_active_filters
 %}<div id="changelist-filter-extra-actions">
    79 :               {% if cl.is_facets_optional %}<h3>
    80 :                 {% if cl.add_facets %}<a href="{{
 cl.remove_facet_link }}" class="hidelink">{% translate "Hide counts"
 %}</a>
    81 :                 {% else %}<a href="{{ cl.add_facet_link }}"
 class="viewlink">{% translate "Show counts" %}</a>{% endif %}
    82 :               </h3>{% endif %}
    83 :               {% if cl.has_active_filters %}<h3>
    84 :                 <a href="{{ cl.clear_all_filters_qs }}">&#10006;
 {% translate "Clear all filters" %}</a>
    85 :               </h3>{% endif %}
    86 :             </div>{% endif %}
    87 :             {% for spec in cl.filter_specs %} {% admin_list_filter
 cl spec %} {% endfor %}
    88 :           </div>
    89 :         {% endif %}
    90 :       {% endblock %}
    91 :     </div>
    92 :   </div>
    93 : {% endblock %}
    94 :

 Traceback (most recent call last):
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 105, in _execute
     return self.cursor.execute(sql, params)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/sqlite3/base.py", line 329, in execute
     return super().execute(query, params)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 The above exception (no such column: demo_rentalitem.id) was the direct
 cause of the following exception:
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/core/handlers/exception.py", line 55, in inner
     response = get_response(request)
                ^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/core/handlers/base.py", line 220, in _get_response
     response = response.render()
                ^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/response.py", line 114, in render
     self.content = self.rendered_content
                    ^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/response.py", line 92, in rendered_content
     return template.render(context, self._request)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/backends/django.py", line 61, in render
     return self.template.render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 171, in render
     return self._render(context)
            ^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 163, in _render
     return self.nodelist.render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/loader_tags.py", line 159, in render
     return compiled_parent._render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 163, in _render
     return self.nodelist.render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/loader_tags.py", line 159, in render
     return compiled_parent._render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 163, in _render
     return self.nodelist.render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/loader_tags.py", line 65, in render
     result = block.nodelist.render(context)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/loader_tags.py", line 65, in render
     result = block.nodelist.render(context)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/defaulttags.py", line 326, in render
     return nodelist.render(context)
            ^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in render
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 1000, in <listcomp>
     return SafeString("".join([node.render_annotated(context) for node in
 self]))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/defaulttags.py", line 242, in render
     nodelist.append(node.render_annotated(context))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/base.py", line 961, in render_annotated
     return self.render(context)
            ^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/template/library.py", line 237, in render
     output = self.func(*resolved_args, **resolved_kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/contrib/admin/templatetags/admin_list.py", line 505, in
 admin_list_filter
     "choices": list(spec.choices(cl)),
                ^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/contrib/admin/filters.py", line 150, in choices
     facet_counts = self.get_facet_queryset(changelist) if add_facets else
 None
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/contrib/admin/filters.py", line 87, in get_facet_queryset
     return filtered_qs.aggregate(

   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/models/query.py", line 604, in aggregate
     return self.query.chain().get_aggregation(self.db, kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/models/sql/query.py", line 615, in get_aggregation
     result = compiler.execute_sql(SINGLE)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/models/sql/compiler.py", line 1562, in execute_sql
     cursor.execute(sql, params)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 122, in execute
     return super().execute(sql, params)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 79, in execute
     return self._execute_with_wrappers(

   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
     return executor(sql, params, many, context)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 100, in _execute
     with self.db.wrap_database_errors:
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/utils.py", line 91, in __exit__
     raise dj_exc_value.with_traceback(traceback) from exc_value
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/utils.py", line 105, in _execute
     return self.cursor.execute(sql, params)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/django_bug_report/.venv/lib/python3.11/site-
 packages/django/db/backends/sqlite3/base.py", line 329, in execute
     return super().execute(query, params)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 Exception Type: OperationalError at /admin/demo/customer/
 Exception Value: no such column: demo_rentalitem.id

 }}}
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35198>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018dac99198e-2a4eabc6-20f5-4e78-aee3-bb8214f91bd4-000000%40eu-central-1.amazonses.com.

Reply via email to