Commit cf08ea49 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.1.X] Refs #13227 -- Partial backport of r12865; backported the changes to...

[1.1.X] Refs #13227 -- Partial backport of r12865; backported the changes to Where tree cloning logic to ensure that unclonable objects in a where() clause don't break querying.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12963 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent ee2b07c7
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -152,7 +152,8 @@ class Q(tree.Node):
    def _combine(self, other, conn):
        if not isinstance(other, Q):
            raise TypeError(other)
        obj = deepcopy(self)
        obj = type(self)()
        obj.add(self, conn)
        obj.add(other, conn)
        return obj

@@ -163,7 +164,8 @@ class Q(tree.Node):
        return self._combine(other, self.AND)

    def __invert__(self):
        obj = deepcopy(self)
        obj = type(self)()
        obj.add(self, self.AND)
        obj.negate()
        return obj

+8 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ Various complex queries that have been problematic in the past.
import datetime
import pickle
import sys
import threading

from django.conf import settings
from django.db import models
@@ -44,6 +45,13 @@ class Note(models.Model):
    def __unicode__(self):
        return self.note

    def __init__(self, *args, **kwargs):
        super(Note, self).__init__(*args, **kwargs)
        # Regression for #13227 -- having an attribute that
        # is unpickleable doesn't stop you from cloning queries
        # that use objects of that type as an argument.
        self.lock = threading.Lock()

class Annotation(models.Model):
    name = models.CharField(max_length=10)
    tag = models.ForeignKey(Tag)