mirror of
https://github.com/django/django.git
synced 2025-10-29 08:36:09 +00:00
Optimized Model and QuerySet pickling version comparison.
This commit is contained in:
committed by
Mariusz Felisiak
parent
72a170b4c3
commit
a8b2db1cae
@@ -9,6 +9,7 @@ from collections import namedtuple
|
||||
from functools import lru_cache
|
||||
from itertools import chain
|
||||
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.core import exceptions
|
||||
from django.db import (
|
||||
@@ -25,7 +26,6 @@ from django.db.models.sql.constants import CURSOR, GET_ITERATOR_CHUNK_SIZE
|
||||
from django.db.models.utils import resolve_callables
|
||||
from django.utils import timezone
|
||||
from django.utils.functional import cached_property, partition
|
||||
from django.utils.version import get_version
|
||||
|
||||
# The maximum number of results to fetch in a get() query.
|
||||
MAX_GET_RESULTS = 21
|
||||
@@ -238,24 +238,25 @@ class QuerySet:
|
||||
def __getstate__(self):
|
||||
# Force the cache to be fully populated.
|
||||
self._fetch_all()
|
||||
return {**self.__dict__, DJANGO_VERSION_PICKLE_KEY: get_version()}
|
||||
return {**self.__dict__, DJANGO_VERSION_PICKLE_KEY: django.__version__}
|
||||
|
||||
def __setstate__(self, state):
|
||||
msg = None
|
||||
pickled_version = state.get(DJANGO_VERSION_PICKLE_KEY)
|
||||
if pickled_version:
|
||||
current_version = get_version()
|
||||
if current_version != pickled_version:
|
||||
msg = (
|
||||
if pickled_version != django.__version__:
|
||||
warnings.warn(
|
||||
"Pickled queryset instance's Django version %s does not "
|
||||
"match the current version %s." % (pickled_version, current_version)
|
||||
"match the current version %s."
|
||||
% (pickled_version, django.__version__),
|
||||
RuntimeWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
else:
|
||||
msg = "Pickled queryset instance's Django version is not specified."
|
||||
|
||||
if msg:
|
||||
warnings.warn(msg, RuntimeWarning, stacklevel=2)
|
||||
|
||||
warnings.warn(
|
||||
"Pickled queryset instance's Django version is not specified.",
|
||||
RuntimeWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
self.__dict__.update(state)
|
||||
|
||||
def __repr__(self):
|
||||
|
||||
Reference in New Issue
Block a user