diff options
| author | Claude Paroz <claude@2xlibre.net> | 2020-05-24 14:14:49 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-05-25 10:45:16 +0200 |
| commit | adf58311b84f2aa92ca57661a8ba8679481ac930 (patch) | |
| tree | 7626022aa95a41732508012c206e733511cf51bb /django/core | |
| parent | b547c426612354536ab884d59661b0d3ef70c0c1 (diff) | |
Fixed #29078 -- Made serializers respect prefetch_related() for m2m fields.
Diffstat (limited to 'django/core')
| -rw-r--r-- | django/core/serializers/python.py | 8 | ||||
| -rw-r--r-- | django/core/serializers/xml_serializer.py | 6 |
2 files changed, 10 insertions, 4 deletions
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py index 5a5d8a7036..0ceb676e90 100644 --- a/django/core/serializers/python.py +++ b/django/core/serializers/python.py @@ -67,9 +67,11 @@ class Serializer(base.Serializer): else: def m2m_value(value): return self._value_from_field(value, value._meta.pk) - self._current[field.name] = [ - m2m_value(related) for related in getattr(obj, field.name).iterator() - ] + m2m_iter = getattr(obj, '_prefetched_objects_cache', {}).get( + field.name, + getattr(obj, field.name).iterator(), + ) + self._current[field.name] = [m2m_value(related) for related in m2m_iter] def getvalue(self): return self.objects diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py index 1f62c8e971..07de9428e7 100644 --- a/django/core/serializers/xml_serializer.py +++ b/django/core/serializers/xml_serializer.py @@ -132,7 +132,11 @@ class Serializer(base.Serializer): self.xml.addQuickElement("object", attrs={ 'pk': str(value.pk) }) - for relobj in getattr(obj, field.name).iterator(): + m2m_iter = getattr(obj, '_prefetched_objects_cache', {}).get( + field.name, + getattr(obj, field.name).iterator(), + ) + for relobj in m2m_iter: handle_m2m(relobj) self.xml.endElement("field") |
