summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2016-05-11 10:12:59 -0400
committerTim Graham <timograham@gmail.com>2016-05-11 10:12:59 -0400
commit67d984413c9540074e4fe6aa033081a35cf192bc (patch)
treedca54ef94c6af62b0b17a414eb3ad6d2bb9b7acd
parent8f6a1a15516629b30e2fa2c48d5e682f7955868c (diff)
Refs #24227 -- Removed ManyToManyField special casing in model_to_dict().
-rw-r--r--django/db/models/fields/related.py5
-rw-r--r--django/forms/models.py16
2 files changed, 5 insertions, 16 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 082d663c8b..2de9ec8abd 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1565,7 +1565,10 @@ class ManyToManyField(RelatedField):
"""
Return the value of this field in the given model instance.
"""
- return getattr(obj, self.attname).all()
+ qs = getattr(obj, self.attname).all()
+ if qs._result_cache is not None:
+ return [item.pk for item in qs]
+ return list(qs.values_list('pk', flat=True))
def save_form_data(self, instance, data):
getattr(instance, self.attname).set(data)
diff --git a/django/forms/models.py b/django/forms/models.py
index 7ba98e1e26..0738421d9e 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -88,21 +88,7 @@ def model_to_dict(instance, fields=None, exclude=None):
continue
if exclude and f.name in exclude:
continue
- if f.many_to_many:
- # If the object doesn't have a primary key yet, just use an empty
- # list for its m2m fields. Calling f.value_from_object will raise
- # an exception.
- if instance.pk is None:
- data[f.name] = []
- else:
- # MultipleChoiceWidget needs a list of pks, not object instances.
- qs = f.value_from_object(instance)
- if qs._result_cache is not None:
- data[f.name] = [item.pk for item in qs]
- else:
- data[f.name] = list(qs.values_list('pk', flat=True))
- else:
- data[f.name] = f.value_from_object(instance)
+ data[f.name] = f.value_from_object(instance)
return data