Fixed #681 -- get_in_bulk no longer assumes PK fields are called id. Also added unit tests to confirm. Thanks, Jeremy Dunck
git-svn-id: http://code.djangoproject.com/svn/django/trunk@991 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
411625a761
commit
f82e64c6b2
|
@ -1360,9 +1360,10 @@ def function_get_sql_clause(opts, **kwargs):
|
||||||
def function_get_in_bulk(opts, klass, *args, **kwargs):
|
def function_get_in_bulk(opts, klass, *args, **kwargs):
|
||||||
id_list = args and args[0] or kwargs['id_list']
|
id_list = args and args[0] or kwargs['id_list']
|
||||||
assert id_list != [], "get_in_bulk() cannot be passed an empty list."
|
assert id_list != [], "get_in_bulk() cannot be passed an empty list."
|
||||||
kwargs['where'] = ["%s.id IN (%s)" % (opts.db_table, ",".join(map(str, id_list)))]
|
kwargs['where'] = ["%s.%s IN (%s)" % (opts.db_table, opts.pk.column, ",".join(['%s'] * len(id_list)))]
|
||||||
|
kwargs['params'] = id_list
|
||||||
obj_list = function_get_list(opts, klass, **kwargs)
|
obj_list = function_get_list(opts, klass, **kwargs)
|
||||||
return dict([(o.id, o) for o in obj_list])
|
return dict([(getattr(o, opts.pk.column), o) for o in obj_list])
|
||||||
|
|
||||||
def function_get_latest(opts, klass, does_not_exist_exception, **kwargs):
|
def function_get_latest(opts, klass, does_not_exist_exception, **kwargs):
|
||||||
kwargs['order_by'] = ('-' + opts.get_latest_by,)
|
kwargs['order_by'] = ('-' + opts.get_latest_by,)
|
||||||
|
|
|
@ -53,6 +53,8 @@ EmployeeDoesNotExist: Employee does not exist for {'pk': 'foo'}
|
||||||
>>> fran.save()
|
>>> fran.save()
|
||||||
>>> employees.get_list(last_name__exact='Jones')
|
>>> employees.get_list(last_name__exact='Jones')
|
||||||
[Dan Jones, Fran Jones]
|
[Dan Jones, Fran Jones]
|
||||||
|
>>> employees.get_in_bulk(['ABC123', 'XYZ456'])
|
||||||
|
{'XYZ456': Fran Jones, 'ABC123': Dan Jones}
|
||||||
|
|
||||||
>>> b = businesses.Business(name='Sears')
|
>>> b = businesses.Business(name='Sears')
|
||||||
>>> b.save()
|
>>> b.save()
|
||||||
|
@ -62,4 +64,6 @@ True
|
||||||
[Dan Jones, Fran Jones]
|
[Dan Jones, Fran Jones]
|
||||||
>>> fran.get_business_list()
|
>>> fran.get_business_list()
|
||||||
[Sears]
|
[Sears]
|
||||||
|
>>> businesses.get_in_bulk(['Sears'])
|
||||||
|
{'Sears': Sears}
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue