Refs #24227 -- Fixed crash of ManyToManyField.value_from_object() on unsaved model instances.
This behavior was removed in 67d984413c
but is needed to prevent a crash in formtools.
This commit is contained in:
parent
4f474607de
commit
a4c20ae85b
|
@ -1565,6 +1565,8 @@ class ManyToManyField(RelatedField):
|
||||||
"""
|
"""
|
||||||
Return the value of this field in the given model instance.
|
Return the value of this field in the given model instance.
|
||||||
"""
|
"""
|
||||||
|
if obj.pk is None:
|
||||||
|
return []
|
||||||
qs = getattr(obj, self.attname).all()
|
qs = getattr(obj, self.attname).all()
|
||||||
if qs._result_cache is not None:
|
if qs._result_cache is not None:
|
||||||
return [item.pk for item in qs]
|
return [item.pk for item in qs]
|
||||||
|
|
|
@ -6,6 +6,14 @@ from django.test.utils import isolate_apps
|
||||||
|
|
||||||
class ManyToManyFieldTests(SimpleTestCase):
|
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):
|
def test_abstract_model_pending_operations(self):
|
||||||
"""
|
"""
|
||||||
Many-to-many fields declared on abstract models should not add lazy
|
Many-to-many fields declared on abstract models should not add lazy
|
||||||
|
|
Loading…
Reference in New Issue