summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
authorKaren Tracey <kmtracey@gmail.com>2010-01-29 17:58:22 +0000
committerKaren Tracey <kmtracey@gmail.com>2010-01-29 17:58:22 +0000
commit199cd0efcac5d0923480bcf3e7ba31b91f56db4f (patch)
tree15d46eef3f5290b9212b03eedb814d7223b0c198 /django/db/models/sql
parent11ee9746a0530ec38f523fb4de44950d9b783877 (diff)
Fixed #12721: Ensured objects with generic relations that use non-integer object ID fields can be deleted on PostgreSQL. Thanks much carljm for patch and Russ for review.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12353 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/subqueries.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py
index e80a023699..ef6cec553e 100644
--- a/django/db/models/sql/subqueries.py
+++ b/django/db/models/sql/subqueries.py
@@ -50,15 +50,19 @@ class DeleteQuery(Query):
for f in cls._meta.many_to_many:
w1 = self.where_class()
+ db_prep_value = None
if isinstance(f, generic.GenericRelation):
from django.contrib.contenttypes.models import ContentType
- field = f.rel.to._meta.get_field(f.content_type_field_name)
- w1.add((Constraint(None, field.column, field), 'exact',
+ ct_field = f.rel.to._meta.get_field(f.content_type_field_name)
+ w1.add((Constraint(None, ct_field.column, ct_field), 'exact',
ContentType.objects.get_for_model(cls).id), AND)
+ id_field = f.rel.to._meta.get_field(f.object_id_field_name)
+ db_prep_value = id_field.get_db_prep_value
for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
where = self.where_class()
where.add((Constraint(None, f.m2m_column_name(), f), 'in',
- pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]),
+ map(db_prep_value,
+ pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE])),
AND)
if w1:
where.add(w1, AND)