summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/fields/related.py2
-rw-r--r--tests/model_fields/test_manytomanyfield.py8
2 files changed, 10 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 2de9ec8abd..8add38d6b0 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1565,6 +1565,8 @@ class ManyToManyField(RelatedField):
"""
Return the value of this field in the given model instance.
"""
+ if obj.pk is None:
+ return []
qs = getattr(obj, self.attname).all()
if qs._result_cache is not None:
return [item.pk for item in qs]
diff --git a/tests/model_fields/test_manytomanyfield.py b/tests/model_fields/test_manytomanyfield.py
index f368c18403..3134a33197 100644
--- a/tests/model_fields/test_manytomanyfield.py
+++ b/tests/model_fields/test_manytomanyfield.py
@@ -6,6 +6,14 @@ from django.test.utils import isolate_apps
class ManyToManyFieldTests(SimpleTestCase):
+ @isolate_apps('model_fields')
+ def test_value_from_object_instance_without_pk(self):
+ class ManyToManyModel(models.Model):
+ m2m = models.ManyToManyField('self', models.CASCADE)
+
+ instance = ManyToManyModel()
+ self.assertEqual(instance._meta.get_field('m2m').value_from_object(instance), [])
+
def test_abstract_model_pending_operations(self):
"""
Many-to-many fields declared on abstract models should not add lazy