Loading django/db/models/fields/related.py +4 −1 Original line number Diff line number Diff line Loading @@ -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) Loading django/forms/models.py +1 −15 Original line number Diff line number Diff line Loading @@ -88,20 +88,6 @@ 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) return data Loading Loading
django/db/models/fields/related.py +4 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
django/forms/models.py +1 −15 Original line number Diff line number Diff line Loading @@ -88,20 +88,6 @@ 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) return data Loading