diff options
| author | Tomek Paczkowski <tomek@hauru.eu> | 2013-02-23 15:50:33 +0100 |
|---|---|---|
| committer | Tomek Paczkowski <tomek@hauru.eu> | 2013-02-23 15:50:33 +0100 |
| commit | 3dddbc0f2380d2654e66c8df4bb40d5e1d42af98 (patch) | |
| tree | 6fdf5704b8b31910e13f148451fc167860178c6d /django | |
| parent | 1b7fb29dfb8579dc627208b8ca6500b5341489a9 (diff) | |
Fixed #19816: pre-evaluate queryset on m2m set
In ReverseManyRelatedObjectsDescriptor.__set__, evaluate possible
queryset to avoid problems when clear() would touch data this queryset
returns.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/fields/related.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index bea88ba337..01b8a550d1 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -904,6 +904,9 @@ class ReverseManyRelatedObjectsDescriptor(object): raise AttributeError("Cannot set values on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name)) manager = self.__get__(instance) + # clear() can change expected output of 'value' queryset, we force evaluation + # of queryset before clear; ticket #19816 + value = tuple(value) manager.clear() manager.add(*value) |
