Refs #13227 -- Adjusted a test to avoid making a shared test model unpickable.
This allowed the Note model to be used in setUpTestData() which requires assigned model instances to be copy.deepcopy()'able.
This commit is contained in:
parent
0e3b0da2e3
commit
1dd96f731d
|
@ -1,8 +1,6 @@
|
|||
"""
|
||||
Various complex queries that have been problematic in the past.
|
||||
"""
|
||||
import threading
|
||||
|
||||
from django.db import models
|
||||
from django.db.models.functions import Now
|
||||
|
||||
|
@ -51,13 +49,6 @@ class Note(models.Model):
|
|||
def __str__(self):
|
||||
return self.note
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# Regression for #13227 -- having an attribute that
|
||||
# is unpicklable 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)
|
||||
|
|
|
@ -3,6 +3,7 @@ import pickle
|
|||
import sys
|
||||
import unittest
|
||||
from operator import attrgetter
|
||||
from threading import Lock
|
||||
|
||||
from django.core.exceptions import EmptyResultSet, FieldError
|
||||
from django.db import DEFAULT_DB_ALIAS, connection
|
||||
|
@ -2198,6 +2199,10 @@ class CloneTests(TestCase):
|
|||
n_list = Note.objects.all()
|
||||
# Evaluate the Note queryset, populating the query cache
|
||||
list(n_list)
|
||||
# Make one of cached results unpickable.
|
||||
n_list._result_cache[0].lock = Lock()
|
||||
with self.assertRaises(TypeError):
|
||||
pickle.dumps(n_list)
|
||||
# Use the note queryset in a query, and evaluate
|
||||
# that query in a way that involves cloning.
|
||||
self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
|
||||
|
|
Loading…
Reference in New Issue