summaryrefslogtreecommitdiff
path: root/django/core/serializers/python.py
diff options
context:
space:
mode:
authorMark Evans <mark@hellobaton.com>2022-09-03 09:53:58 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-09-05 20:23:32 +0200
commit19e0587ee596debf77540d6a08ccb6507e60b6a7 (patch)
treed896dcf55e3e84901dbba69c80189be7129eaef6 /django/core/serializers/python.py
parent604fadde11966c5fdfe5a236a7a3963ee868f764 (diff)
downloaddjango-19e0587ee596debf77540d6a08ccb6507e60b6a7.tar.gz
Fixed #33937 -- Optimized serialization of related m2m fields without natural keys.
Diffstat (limited to 'django/core/serializers/python.py')
-rw-r--r--django/core/serializers/python.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index a3918bf9d2..fa3bce2948 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -70,14 +70,20 @@ class Serializer(base.Serializer):
def m2m_value(value):
return value.natural_key()
+ def queryset_iterator(obj, field):
+ return getattr(obj, field.name).iterator()
+
else:
def m2m_value(value):
return self._value_from_field(value, value._meta.pk)
+ def queryset_iterator(obj, field):
+ return getattr(obj, field.name).only("pk").iterator()
+
m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get(
field.name,
- getattr(obj, field.name).iterator(),
+ queryset_iterator(obj, field),
)
self._current[field.name] = [m2m_value(related) for related in m2m_iter]