mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #31926 -- Fixed recreating queryset with FilteredRelation when using a pickled Query.
In a pickled join, the join_fields had the same values, but weren't the same object (contrary to when not pickling the QuerySet).
This commit is contained in:
committed by
Mariusz Felisiak
parent
292b3be698
commit
c32d8f33d8
@@ -219,6 +219,40 @@ class PickleabilityTestCase(TestCase):
|
||||
with self.assertNumQueries(0):
|
||||
self.assert_pickles(groups)
|
||||
|
||||
def test_pickle_filteredrelation(self):
|
||||
group = Group.objects.create(name='group')
|
||||
event_1 = Event.objects.create(title='Big event', group=group)
|
||||
event_2 = Event.objects.create(title='Small event', group=group)
|
||||
Happening.objects.bulk_create([
|
||||
Happening(event=event_1, number1=5),
|
||||
Happening(event=event_2, number1=3),
|
||||
])
|
||||
groups = Group.objects.annotate(
|
||||
big_events=models.FilteredRelation(
|
||||
'event',
|
||||
condition=models.Q(event__title__startswith='Big'),
|
||||
),
|
||||
).annotate(sum_number=models.Sum('big_events__happening__number1'))
|
||||
groups_query = pickle.loads(pickle.dumps(groups.query))
|
||||
groups = Group.objects.all()
|
||||
groups.query = groups_query
|
||||
self.assertEqual(groups.get().sum_number, 5)
|
||||
|
||||
def test_pickle_filteredrelation_m2m(self):
|
||||
group = Group.objects.create(name='group')
|
||||
m2mmodel = M2MModel.objects.create()
|
||||
m2mmodel.groups.add(group)
|
||||
groups = Group.objects.annotate(
|
||||
first_m2mmodels=models.FilteredRelation(
|
||||
'm2mmodel',
|
||||
condition=models.Q(m2mmodel__pk__lt=10),
|
||||
),
|
||||
).annotate(count_groups=models.Count('first_m2mmodels__groups'))
|
||||
groups_query = pickle.loads(pickle.dumps(groups.query))
|
||||
groups = Group.objects.all()
|
||||
groups.query = groups_query
|
||||
self.assertEqual(groups.get().count_groups, 1)
|
||||
|
||||
def test_annotation_with_callable_default(self):
|
||||
# Happening.when has a callable default of datetime.datetime.now.
|
||||
qs = Happening.objects.annotate(latest_time=models.Max('when'))
|
||||
|
||||
Reference in New Issue
Block a user