Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -288,6 +288,7 @@ answer newbie questions, and generally made Django that much better: Hiroki Kiyohara <hirokiky@gmail.com> Honza Král <honza.kral@gmail.com> Horst Gutmann <zerok@zerokspot.com> Hugo Osvaldo Barrera <hugo@barrera.io> Hyun Mi Ae Iacopo Spalletti <i.spalletti@nephila.it> Ian A Wilson <http://ianawilson.com> Loading django/contrib/admin/widgets.py +20 −4 Original line number Diff line number Diff line Loading @@ -11,11 +11,10 @@ from django.forms.utils import flatatt from django.forms.widgets import RadioFieldRenderer from django.template.loader import render_to_string from django.urls import reverse from django.urls.exceptions import NoReverseMatch from django.utils import six from django.utils.encoding import force_text from django.utils.html import ( escape, format_html, format_html_join, smart_urlquote, ) from django.utils.html import format_html, format_html_join, smart_urlquote from django.utils.safestring import mark_safe from django.utils.text import Truncator from django.utils.translation import ugettext as _ Loading Loading @@ -194,10 +193,27 @@ class ForeignKeyRawIdWidget(forms.TextInput): key = self.rel.get_related_field().name try: obj = self.rel.model._default_manager.using(self.db).get(**{key: value}) return ' <strong>%s</strong>' % escape(Truncator(obj).words(14, truncate='...')) except (ValueError, self.rel.model.DoesNotExist): return '' label = ' <strong>{}</strong>' text = Truncator(obj).words(14, truncate='...') try: change_url = reverse( '%s:%s_%s_change' % ( self.admin_site.name, obj._meta.app_label, obj._meta.object_name.lower(), ), args=(obj.pk,) ) except NoReverseMatch: pass # Admin not registered for target model. else: text = format_html('<a href="{}">{}</a>', change_url, text) return format_html(label, text) class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): """ Loading docs/releases/1.10.txt +3 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,9 @@ Minor features using the current active language. A new ``LogEntry.get_change_message()`` method is now the preferred way of retrieving the change message. * Selected objects for fields in ``ModelAdmin.raw_id_fields`` now have a link to object's change form. :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading tests/admin_widgets/tests.py +7 −4 Original line number Diff line number Diff line Loading @@ -480,8 +480,9 @@ class ForeignKeyRawIdWidgetTest(TestCase): '<input type="text" name="test" value="%(bandpk)s" ' 'class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/band/?_to_field=id" class="related-lookup" ' 'id="lookup_id_test" title="Lookup"></a> <strong>Linkin Park</strong>' % {'bandpk': band.pk} 'id="lookup_id_test" title="Lookup"></a> <strong>' '<a href="/admin_widgets/band/%(bandpk)s/change/">Linkin Park</a>' '</strong>' % {'bandpk': band.pk} ) def test_relations_to_non_primary_key(self): Loading @@ -500,7 +501,8 @@ class ForeignKeyRawIdWidgetTest(TestCase): 'class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong>Apple</strong>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' 'Apple</a></strong>' % {'pk': apple.pk} ) def test_fk_related_model_not_in_admin(self): Loading Loading @@ -549,7 +551,8 @@ class ForeignKeyRawIdWidgetTest(TestCase): '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong>Hidden</strong>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' 'Hidden</a></strong>' % {'pk': hidden.pk} ) Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -288,6 +288,7 @@ answer newbie questions, and generally made Django that much better: Hiroki Kiyohara <hirokiky@gmail.com> Honza Král <honza.kral@gmail.com> Horst Gutmann <zerok@zerokspot.com> Hugo Osvaldo Barrera <hugo@barrera.io> Hyun Mi Ae Iacopo Spalletti <i.spalletti@nephila.it> Ian A Wilson <http://ianawilson.com> Loading
django/contrib/admin/widgets.py +20 −4 Original line number Diff line number Diff line Loading @@ -11,11 +11,10 @@ from django.forms.utils import flatatt from django.forms.widgets import RadioFieldRenderer from django.template.loader import render_to_string from django.urls import reverse from django.urls.exceptions import NoReverseMatch from django.utils import six from django.utils.encoding import force_text from django.utils.html import ( escape, format_html, format_html_join, smart_urlquote, ) from django.utils.html import format_html, format_html_join, smart_urlquote from django.utils.safestring import mark_safe from django.utils.text import Truncator from django.utils.translation import ugettext as _ Loading Loading @@ -194,10 +193,27 @@ class ForeignKeyRawIdWidget(forms.TextInput): key = self.rel.get_related_field().name try: obj = self.rel.model._default_manager.using(self.db).get(**{key: value}) return ' <strong>%s</strong>' % escape(Truncator(obj).words(14, truncate='...')) except (ValueError, self.rel.model.DoesNotExist): return '' label = ' <strong>{}</strong>' text = Truncator(obj).words(14, truncate='...') try: change_url = reverse( '%s:%s_%s_change' % ( self.admin_site.name, obj._meta.app_label, obj._meta.object_name.lower(), ), args=(obj.pk,) ) except NoReverseMatch: pass # Admin not registered for target model. else: text = format_html('<a href="{}">{}</a>', change_url, text) return format_html(label, text) class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): """ Loading
docs/releases/1.10.txt +3 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,9 @@ Minor features using the current active language. A new ``LogEntry.get_change_message()`` method is now the preferred way of retrieving the change message. * Selected objects for fields in ``ModelAdmin.raw_id_fields`` now have a link to object's change form. :mod:`django.contrib.admindocs` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Loading
tests/admin_widgets/tests.py +7 −4 Original line number Diff line number Diff line Loading @@ -480,8 +480,9 @@ class ForeignKeyRawIdWidgetTest(TestCase): '<input type="text" name="test" value="%(bandpk)s" ' 'class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/band/?_to_field=id" class="related-lookup" ' 'id="lookup_id_test" title="Lookup"></a> <strong>Linkin Park</strong>' % {'bandpk': band.pk} 'id="lookup_id_test" title="Lookup"></a> <strong>' '<a href="/admin_widgets/band/%(bandpk)s/change/">Linkin Park</a>' '</strong>' % {'bandpk': band.pk} ) def test_relations_to_non_primary_key(self): Loading @@ -500,7 +501,8 @@ class ForeignKeyRawIdWidgetTest(TestCase): 'class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong>Apple</strong>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' 'Apple</a></strong>' % {'pk': apple.pk} ) def test_fk_related_model_not_in_admin(self): Loading Loading @@ -549,7 +551,8 @@ class ForeignKeyRawIdWidgetTest(TestCase): '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" />' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong>Hidden</strong>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' 'Hidden</a></strong>' % {'pk': hidden.pk} ) Loading