#26387 closed Bug (fixed)
Related popup doesn’t open in a changelist when list_editable in raw_id_fields
Reported by: | Bertrand Bordage | Owned by: | Tim Graham |
---|---|---|---|
Component: | contrib.admin | Version: | 1.8 |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Suppose you have this admin class, where 'fk' is a ForeignKey field name:
@register(YourModel) class YourModelAdmin(ModelAdmin): list_display = ['pk', 'fk'] list_editable = ['fk'] raw_id_fields = ['fk']
When you open the changelist, everything is displayed normally, fk consists in a field and a magnifying glass. But no javascript 'click' event is bound to the glass, so the changelist of the related model opens directly in the main window, not in popup.
Of course, it prevents the users from filling the field, the only solutions being: to type the ID, or to open the change view, which may be disabled if you want users to only use the changelist…
Bug experienced on all Django 1.9 versions, and probably master.
Change History (8)
comment:1 by , 9 years ago
Description: | modified (diff) |
---|---|
Severity: | Normal → Release blocker |
Summary: | Related popup doesn’t open in a changelist when in raw_id_fields → Related popup doesn’t open in a changelist when list_editable in raw_id_fields |
Triage Stage: | Unreviewed → Accepted |
Version: | 1.9 → 1.8 |
comment:2 by , 9 years ago
The solution would be to partially include admin/js/change_form.js
to the changelist view.
I made a workaround for Django 1.9 (and probably all other versions). Create a static file admin/js/change_list.js
containing this:
// FIXME: Remove this file, it’s a workaround to https://code.djangoproject.com/ticket/26387 (function($) { 'use strict'; $(document).ready(function() { $('.related-lookup').click(function(e) { e.preventDefault(); var event = $.Event('django:lookup-related'); $(this).trigger(event); if (!event.isDefaultPrevented()) { showRelatedObjectLookupPopup(this); } }); }); })(django.jQuery);
Then add a media
property to your admin class:
from django.forms import Media class YourModelAdmin(ModelAdmin): […] # FIXME: Remove this workaround to https://code.djangoproject.com/ticket/26387 @property def media(self): return super(YourModelAdmin, self).media + Media(js=['admin/js/change_list.js'])
comment:3 by , 9 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
I found it necessary to include another field in
list_display
to reproduce this. Otherwise on master, you'll get an error like"The value of 'list_editable[0]' refers to the first field in 'list_display' ('question'), which cannot be used unless 'list_display_links' is set."
I edited the ticket description to include this.Seems to be a regression in Django 1.8 the popup works on 1.7.