[Django] #34216: django admin when field is autocomplete it overrides ModelForm filter

35 views
Skip to first unread message

Django

unread,
Dec 17, 2022, 4:20:48 PM12/17/22
to django-...@googlegroups.com
#34216: django admin when field is autocomplete it overrides ModelForm filter
-------------------------------------+-------------------------------------
Reporter: sahaliyev | Owner: nobody
Type: Bug | Status: new
Component: | Version: 4.1
contrib.admin | Keywords: autocomplete,
Severity: Normal | filter
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
having issue on django admin. I want one of my foreign key field to be
searchable and I achieved that making it autocomplete.


{{{
class CollectionAdmin(VersionAdmin, admin.ModelAdmin):
form = CollectionForm
autocomplete_fields = ["task"]
}}}


I also filter that foreign key in ModelForm.


{{{
class CollectionForm(forms.ModelForm):
class Meta:
model = Collection
fields = "__all__"

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

if self.fields.get("task"):
self.fields["task"].queryset =
self.fields["task"].queryset.filter(
status=TaskStatus.ASSIGNED
)
}}}


When task is not autocomplete field in Collection my filter works as
expected. However, when task is autocomplete field in Collection, filter
does not work. Instead of my filter in form, task admin get_queryset
method is called which is not what I want.

TaskAdmin get_queryset method just filters by user, however I want more
filter as you see above, for TaskStatus as well.


{{{
def get_queryset(self, request):
qs = super().get_queryset(request)
if
request.user.groups.filter(name=settings.COPYWRITER_GROUP).exists():
return qs.filter(assigned_to=request.user)
return qs
}}}


Repeating, form init filter works if field is not autocomplete.

I tried removing task from autocomplete of Collection and it worked. I
want my form filter not overridden if field is autocomplete.

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

Django

unread,
Dec 19, 2022, 12:27:04 AM12/19/22
to django-...@googlegroups.com
#34216: django admin when field is autocomplete it overrides ModelForm filter
-------------------------------------+-------------------------------------
Reporter: sahaliyev | Owner: nobody
Type: Bug | Status: closed
Component: contrib.admin | Version: 4.1
Severity: Normal | Resolution: invalid
Keywords: autocomplete, | Triage Stage:
filter | Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* status: new => closed
* resolution: => invalid


Comment:

`.queryset` cannot be override for autocomplete fields as it's initialized
for every GET request so you need to add custom logic to `get_queryset()`.
Please use one of
[https://code.djangoproject.com/wiki/TicketClosingReasons/UseSupportChannels
support channels] where folks should help you implement it differently in
your code.

--
Ticket URL: <https://code.djangoproject.com/ticket/34216#comment:1>

Reply all
Reply to author
Forward
0 new messages