summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/base.py10
1 files changed, 6 insertions, 4 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index a3478445f7..b7d6e93def 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -241,10 +241,12 @@ class Model(object):
placeholders = ['%s'] * len(field_names)
if self._meta.order_with_respect_to:
field_names.append(qn('_order'))
- # TODO: This assumes the database supports subqueries.
- placeholders.append('(SELECT COUNT(*) FROM %s WHERE %s = %%s)' % \
- (qn(self._meta.db_table), qn(self._meta.order_with_respect_to.column)))
- db_values.append(getattr(self, self._meta.order_with_respect_to.attname))
+ placeholders.append('%s')
+ subsel = 'SELECT COUNT(*) FROM %s WHERE %s = %%s' % (
+ qn(self._meta.db_table),
+ qn(self._meta.order_with_respect_to.column))
+ cursor.execute(subsel, (getattr(self, self._meta.order_with_respect_to.attname),))
+ db_values.append(cursor.fetchone()[0])
if db_values:
cursor.execute("INSERT INTO %s (%s) VALUES (%s)" % \
(qn(self._meta.db_table), ','.join(field_names),