summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCollin Anderson <collin@onetencommunications.com>2013-08-06 12:38:31 -0400
committerTim Graham <timograham@gmail.com>2013-08-06 13:44:31 -0400
commite3e0cf8a0f75ae18bc401182bfbdea2c27bb0244 (patch)
treeb47cee9f589a86e9fc55bee44195f91bde7f0e73
parent4c90081b5b296bc2d7d9689609bfe1857e35b091 (diff)
[1.6.x] Fixed #20865 -- Fixed raw_id_fields to work with callable limit_choices_to.
Backport of d53e574676 from master
-rw-r--r--django/contrib/admin/widgets.py2
-rw-r--r--tests/admin_widgets/tests.py7
2 files changed, 9 insertions, 0 deletions
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index eeae846320..c4b15cdd6a 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -116,6 +116,8 @@ def url_params_from_lookup_dict(lookups):
if lookups and hasattr(lookups, 'items'):
items = []
for k, v in lookups.items():
+ if callable(v):
+ v = v()
if isinstance(v, (tuple, list)):
v = ','.join([str(x) for x in v])
elif isinstance(v, bool):
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index b4d6da034b..d275c7669e 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -226,6 +226,13 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase):
self.assertEqual(lookup1, {'color__in': 'red,blue'})
self.assertEqual(lookup1, lookup2)
+ def test_url_params_from_lookup_dict_callable(self):
+ def my_callable():
+ return 'works'
+ lookup1 = widgets.url_params_from_lookup_dict({'myfield': my_callable})
+ lookup2 = widgets.url_params_from_lookup_dict({'myfield': my_callable()})
+ self.assertEqual(lookup1, lookup2)
+
class FilteredSelectMultipleWidgetTest(DjangoTestCase):
def test_render(self):