summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py5
1 files changed, 5 insertions, 0 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index db710a2ed2..0e80e19042 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -84,6 +84,7 @@ def model_to_dict(instance, fields=None, exclude=None):
fields will be excluded from the returned dict, even if they are listed in
the ``fields`` argument.
"""
+ from django.db import models
opts = instance._meta
data = {}
for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
@@ -94,6 +95,10 @@ def model_to_dict(instance, fields=None, exclude=None):
if exclude and f.name in exclude:
continue
data[f.name] = f.value_from_object(instance)
+ # Evaluate ManyToManyField QuerySets to prevent subsequent model
+ # alteration of that field from being reflected in the data.
+ if isinstance(f, models.ManyToManyField):
+ data[f.name] = list(data[f.name])
return data