diff options
| author | Nadège Michel <michel.nadege@gmail.com> | 2019-06-27 09:47:13 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-06-27 15:10:22 +0200 |
| commit | 895b15771e5b6c48df45d11ef9ce41678639974c (patch) | |
| tree | e285bf9864573d1f640c0348abcebe6a3a7504fd | |
| parent | 4305fbe8b11f44ab5d6759346488026c1e9677b2 (diff) | |
Fixed #28725 -- Prevented serializing inherited ManyToManyFields in child model.
| -rw-r--r-- | django/core/serializers/base.py | 2 | ||||
| -rw-r--r-- | tests/serializers/models/multi_table.py | 1 | ||||
| -rw-r--r-- | tests/serializers/tests.py | 12 |
3 files changed, 12 insertions, 3 deletions
diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py index 4fa95f6f6e..cf8e7d3b86 100644 --- a/django/core/serializers/base.py +++ b/django/core/serializers/base.py @@ -108,7 +108,7 @@ class Serializer: else: if self.selected_fields is None or field.attname[:-3] in self.selected_fields: self.handle_fk_field(obj, field) - for field in concrete_model._meta.many_to_many: + for field in concrete_model._meta.local_many_to_many: if field.serialize: if self.selected_fields is None or field.attname in self.selected_fields: self.handle_m2m_field(obj, field) diff --git a/tests/serializers/models/multi_table.py b/tests/serializers/models/multi_table.py index e3a5e7fd5f..4b07880925 100644 --- a/tests/serializers/models/multi_table.py +++ b/tests/serializers/models/multi_table.py @@ -8,6 +8,7 @@ class ParentManager(models.Manager): class Parent(models.Model): parent_data = models.CharField(max_length=30, unique=True) + parent_m2m = models.ManyToManyField('self') objects = ParentManager() diff --git a/tests/serializers/tests.py b/tests/serializers/tests.py index 66fc2ef40c..222eee7e95 100644 --- a/tests/serializers/tests.py +++ b/tests/serializers/tests.py @@ -12,8 +12,9 @@ from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature from django.test.utils import Approximate from .models import ( - Actor, Article, Author, AuthorProfile, BaseModel, Category, ComplexModel, - Movie, Player, ProxyBaseModel, ProxyProxyBaseModel, Score, Team, + Actor, Article, Author, AuthorProfile, BaseModel, Category, Child, + ComplexModel, Movie, Player, ProxyBaseModel, ProxyProxyBaseModel, Score, + Team, ) @@ -340,6 +341,13 @@ class SerializersTestBase: self.assertEqual(base_data, proxy_data.replace('proxy', '')) self.assertEqual(base_data, proxy_proxy_data.replace('proxy', '')) + def test_serialize_inherited_m2m(self): + child_1 = Child.objects.create(parent_data='a', child_data='b') + child_2 = Child.objects.create(parent_data='c', child_data='d') + child_1.parent_m2m.add(child_2) + child_data = serializers.serialize(self.serializer_name, [child_1, child_2]) + self.assertEqual(self._get_field_values(child_data, 'parent_m2m'), []) + class SerializerAPITests(SimpleTestCase): |
