[1.6.x] Fixed #20865 -- Fixed raw_id_fields to work with callable limit_choices_to.

Backport of d53e574676 from master
This commit is contained in:
Collin Anderson 2013-08-06 12:38:31 -04:00 committed by Tim Graham
parent 4c90081b5b
commit e3e0cf8a0f
2 changed files with 9 additions and 0 deletions

View File

@ -116,6 +116,8 @@ def url_params_from_lookup_dict(lookups):
if lookups and hasattr(lookups, 'items'): if lookups and hasattr(lookups, 'items'):
items = [] items = []
for k, v in lookups.items(): for k, v in lookups.items():
if callable(v):
v = v()
if isinstance(v, (tuple, list)): if isinstance(v, (tuple, list)):
v = ','.join([str(x) for x in v]) v = ','.join([str(x) for x in v])
elif isinstance(v, bool): elif isinstance(v, bool):

View File

@ -226,6 +226,13 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase):
self.assertEqual(lookup1, {'color__in': 'red,blue'}) self.assertEqual(lookup1, {'color__in': 'red,blue'})
self.assertEqual(lookup1, lookup2) 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): class FilteredSelectMultipleWidgetTest(DjangoTestCase):
def test_render(self): def test_render(self):