#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 [email protected].
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