#33729: [BUG] AutocompleteSelect widget broken after moving from django 2.2 to
django 3.2
-------------------------------------+-------------------------------------
               Reporter:  exo        |          Owner:  nobody
                   Type:  Bug        |         Status:  new
              Component:             |        Version:  3.2
  contrib.admin                      |
               Severity:  Normal     |       Keywords:  AutocompleteSelect
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Hello :) After upgrading `Django` version to `3.2`, widget
 `AutocompleteSelect` that I use in `django` admin panel (to have a drop-
 down from which I can choose an object) **is broken**.

 The error I see is
 {{{
     AttributeError at /admin/question/
     'QuerySet' object has no attribute 'name'

     Request Method:     GET
     Request URL:        http://localhost:8000/admin/question/
     Django Version:     3.2.13
     Exception Type:     AttributeError
     Exception Value:
     'QuerySet' object has no attribute 'name'
     Exception Location: /home/django-app/env/lib/python3.8/site-
 packages/django/contrib/admin/widgets.py, line 412, in build_attrs
     Python Executable:  /home/django-app/env/bin/python3
     Python Version:     3.8.10
     Python Path:
     ['/home/django-app/testsite',
      '/usr/lib/python38.zip',
      '/usr/lib/python3.8',
      '/usr/lib/python3.8/lib-dynload',
      '/home/django-app/env/lib/python3.8/site-packages']
     Server time:        Fri, 20 May 2022 10:13:27 +0000
     Error during template rendering
     In template /home/django-
 app/testsite/polls/templates/admin/question_export.html, error at line 18

     'QuerySet' object has no attribute 'name'
     11
     12  {% block content %}
     13      <div id="content-main">
     14        <p>Select question to export:</p>
     15          <form method="post" enctype="multipart/form-data">
     16              {% csrf_token %}
     17              <table>
     18                  {{form.as_table}}
     19              </table>
     20              <div class="submit-row">
     21                  <input type="submit" value="Export Question" />
     22              </div>
     23          </form>
     24      </div>
     25      {{form.media}}
     26  {% endblock %}
     27
 }}}
 `AutocompleteSelect` inherits from `AutocompleteMixin`

 When I compare `AutocompleteMixin` for `django 3.2` and `django 2.2`
 
https://github.com/django/django/blob/3.2.13/django/contrib/admin/widgets.py#L410-L412
 
https://github.com/django/django/blob/2.2.7/django/contrib/admin/widgets.py#L411

 I see that they added new attributes
 {{{
     'data-app-label': self.field.model._meta.app_label,
     'data-model-name': self.field.model._meta.model_name,
     'data-field-name': self.field.name,
 }}}
 in `django 3.2`
 but there is no `name` on `self.field` and probably that's why I get this
 error.


 The code looks like this

 view.py
 {{{
     from django.forms import ModelChoiceField
     from django import forms
     from django.contrib import admin
     from django.contrib.admin.widgets import AutocompleteSelect

     class QuestionChoiceField(ModelChoiceField):
         widget = AutocompleteSelect(Question.objects.all(), admin.site)


     class QuestionExportForm(forms.Form):
         question = QuestionChoiceField(queryset=Question.objects.all(),
 required=True)

         def clean_question(self):
             return self.cleaned_data["question"]


     class QuestionExportView(FormView):
         template_name = "admin/question_export.html"
         form_class = QuestionExportForm
         success_url = "/admin/"

         def form_valid(self, form):
             question = form.cleaned_data.get("question")
             return generate_response(question)
 }}}

 models.py
 {{{
     from django.db import models


     class Question(models.Model):
         question_text = models.CharField(max_length=200)
         pub_date = models.DateTimeField('date published')

 }}}
 templates/admin/question_export.html
 {{{
     {% block content %}
         <div id="content-main">
           <p>Select question to export:</p>
             <form method="post" enctype="multipart/form-data">
                 {% csrf_token %}
                 <table>
                     {{form.as_table}}
                 </table>
                 <div class="submit-row">
                     <input type="submit" value="Export Question" />
                 </div>
             </form>
         </div>
         {{form.media}}
     {% endblock %}
 }}}

 How can I approach this issue? Any help would be appreciated :)!

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33729>
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/01070180e17d6505-cbae3f16-77f6-475d-a593-c9845ababa92-000000%40eu-central-1.amazonses.com.

Reply via email to