#33729 closed Bug (invalid)
AutocompleteSelect widget broken after moving from django 2.2 to django 3.2 — at Version 5
| Reported by: | exo | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.admin | Version: | 3.2 |
| Severity: | Normal | Keywords: | AutocompleteSelect |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
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
from django.http import HttpResponse
def generate_response(question):
# some code
return HttpResponse(content_type="text/csv")
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):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
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 %}
urls.py
from django.contrib.admin.views.decorators import staff_member_required
from django.urls import path
from polls.views import QuestionExportView
app_name = "question_exports"
urlpatterns = [
path("admin/question/", staff_member_required(QuestionExportView.as_view()), name="question"),
path('admin/', admin.site.urls),
]
How can I approach this issue? Any help would be appreciated :)!
Change History (5)
comment:1 by , 3 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
comment:2 by , 3 years ago
| Summary: | [BUG] AutocompleteSelect widget broken after moving from django 2.2 to django 3.2 → \AutocompleteSelect widget broken after moving from django 2.2 to django 3.2 |
|---|
comment:3 by , 3 years ago
| Summary: | \AutocompleteSelect widget broken after moving from django 2.2 to django 3.2 → AutocompleteSelect widget broken after moving from django 2.2 to django 3.2 |
|---|
comment:4 by , 3 years ago
| Description: | modified (diff) |
|---|
comment:5 by , 3 years ago
| Description: | modified (diff) |
|---|
Replying to exo:
self.fieldshould be aFieldinstance not aQuerySet. Moreover autocomplete works for me. It looks like an issue in 3rd-party package (see similar reports for autocomplete e.g. #32619 and #32659).Closing per TicketClosingReasons/UseSupportChannels.