From 19e0587ee596debf77540d6a08ccb6507e60b6a7 Mon Sep 17 00:00:00 2001 From: Mark Evans Date: Sat, 3 Sep 2022 09:53:58 -0400 Subject: Fixed #33937 -- Optimized serialization of related m2m fields without natural keys. --- django/core/serializers/python.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'django/core/serializers/python.py') 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] -- cgit v1.3