mirror of
https://github.com/django/django.git
synced 2025-02-01 05:10:04 +00:00
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.
|
Various complex queries that have been problematic in the past.
|
||||||
"""
|
"""
|
||||||
import threading
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.functions import Now
|
from django.db.models.functions import Now
|
||||||
|
|
||||||
@ -51,13 +49,6 @@ class Note(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.note
|
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):
|
class Annotation(models.Model):
|
||||||
name = models.CharField(max_length=10)
|
name = models.CharField(max_length=10)
|
||||||
|
@ -3,6 +3,7 @@ import pickle
|
|||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
from threading import Lock
|
||||||
|
|
||||||
from django.core.exceptions import EmptyResultSet, FieldError
|
from django.core.exceptions import EmptyResultSet, FieldError
|
||||||
from django.db import DEFAULT_DB_ALIAS, connection
|
from django.db import DEFAULT_DB_ALIAS, connection
|
||||||
@ -2198,6 +2199,10 @@ class CloneTests(TestCase):
|
|||||||
n_list = Note.objects.all()
|
n_list = Note.objects.all()
|
||||||
# Evaluate the Note queryset, populating the query cache
|
# Evaluate the Note queryset, populating the query cache
|
||||||
list(n_list)
|
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
|
# Use the note queryset in a query, and evaluate
|
||||||
# that query in a way that involves cloning.
|
# that query in a way that involves cloning.
|
||||||
self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
|
self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user