From 199cd0efcac5d0923480bcf3e7ba31b91f56db4f Mon Sep 17 00:00:00 2001 From: Karen Tracey Date: Fri, 29 Jan 2010 17:58:22 +0000 Subject: 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 --- django/db/models/sql/subqueries.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'django/db/models/sql') 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) -- cgit v1.3