mirror of
https://github.com/django/django.git
synced 2025-09-27 04:29:17 +00:00
Fixed #28543 -- Prevented ManyToManyField.value_from_object() from being lazy.
Previously, it was a QuerySet which could reevaluate to a new value if the model's data changes. This is inconsistent with other Field.value_from_object() methods. This allows reverting the fix in the admin for refs #27998.
This commit is contained in:
parent
ec6481246a
commit
e5bd585c6e
6 changed files with 41 additions and 18 deletions
|
@ -3113,3 +3113,18 @@ class StrictAssignmentTests(TestCase):
|
|||
'__all__': ['Cannot set attribute'],
|
||||
'title': ['This field cannot be blank.']
|
||||
})
|
||||
|
||||
|
||||
class ModelToDictTests(TestCase):
|
||||
def test_many_to_many(self):
|
||||
"""Data for a ManyToManyField is a list rather than a lazy QuerySet."""
|
||||
blue = Colour.objects.create(name='blue')
|
||||
red = Colour.objects.create(name='red')
|
||||
item = ColourfulItem.objects.create()
|
||||
item.colours.set([blue])
|
||||
data = model_to_dict(item)['colours']
|
||||
self.assertEqual(data, [blue])
|
||||
item.colours.set([red])
|
||||
# If data were a QuerySet, it would be reevaluated here and give "red"
|
||||
# instead of the original value.
|
||||
self.assertEqual(data, [blue])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue