mirror of
https://github.com/django/django.git
synced 2025-07-05 02:09:13 +00:00
magic-removal: Fixed #1354 -- Fixed order_with_respect_to. Thanks, andreas@mindpicnic.com
git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2672 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
d6863bede6
commit
551536a82c
@ -129,6 +129,8 @@ class Model(object):
|
|||||||
if opts.order_with_respect_to:
|
if opts.order_with_respect_to:
|
||||||
cls.get_next_in_order = curry(cls._get_next_or_previous_in_order, is_next=True)
|
cls.get_next_in_order = curry(cls._get_next_or_previous_in_order, is_next=True)
|
||||||
cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False)
|
cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False)
|
||||||
|
setattr(opts.order_with_respect_to.rel.to, 'get_%s_order' % cls.__name__.lower(), curry(method_get_order, cls))
|
||||||
|
setattr(opts.order_with_respect_to.rel.to, 'set_%s_order' % cls.__name__.lower(), curry(method_set_order, cls))
|
||||||
|
|
||||||
# Give the class a docstring -- its definition.
|
# Give the class a docstring -- its definition.
|
||||||
if cls.__doc__ is None:
|
if cls.__doc__ is None:
|
||||||
@ -269,7 +271,7 @@ class Model(object):
|
|||||||
cachename = "__%s_order_cache" % is_next
|
cachename = "__%s_order_cache" % is_next
|
||||||
if not hasattr(self, cachename):
|
if not hasattr(self, cachename):
|
||||||
op = is_next and '>' or '<'
|
op = is_next and '>' or '<'
|
||||||
order_field = self.order_with_respect_to
|
order_field = self._meta.order_with_respect_to
|
||||||
where = ['%s %s (SELECT %s FROM %s WHERE %s=%%s)' % \
|
where = ['%s %s (SELECT %s FROM %s WHERE %s=%%s)' % \
|
||||||
(backend.quote_name('_order'), op, backend.quote_name('_order'),
|
(backend.quote_name('_order'), op, backend.quote_name('_order'),
|
||||||
backend.quote_name(opts.db_table), backend.quote_name(opts.pk.column)),
|
backend.quote_name(opts.db_table), backend.quote_name(opts.pk.column)),
|
||||||
@ -384,11 +386,11 @@ def method_get_order(ordered_obj, self):
|
|||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
# Example: "SELECT id FROM poll_choices WHERE poll_id = %s ORDER BY _order"
|
# Example: "SELECT id FROM poll_choices WHERE poll_id = %s ORDER BY _order"
|
||||||
sql = "SELECT %s FROM %s WHERE %s = %%s ORDER BY %s" % \
|
sql = "SELECT %s FROM %s WHERE %s = %%s ORDER BY %s" % \
|
||||||
(backend.quote_name(ordered_obj.pk.column),
|
(backend.quote_name(ordered_obj._meta.pk.column),
|
||||||
backend.quote_name(ordered_obj.db_table),
|
backend.quote_name(ordered_obj._meta.db_table),
|
||||||
backend.quote_name(ordered_obj.order_with_respect_to.column),
|
backend.quote_name(ordered_obj._meta.order_with_respect_to.column),
|
||||||
backend.quote_name('_order'))
|
backend.quote_name('_order'))
|
||||||
rel_val = getattr(self, ordered_obj.order_with_respect_to.rel.field_name)
|
rel_val = getattr(self, ordered_obj._meta.order_with_respect_to.rel.field_name)
|
||||||
cursor.execute(sql, [rel_val])
|
cursor.execute(sql, [rel_val])
|
||||||
return [r[0] for r in cursor.fetchall()]
|
return [r[0] for r in cursor.fetchall()]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user