Commit 67d98441 authored by Tim Graham's avatar Tim Graham
Browse files

Refs #24227 -- Removed ManyToManyField special casing in model_to_dict().

parent 8f6a1a15
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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)
+1 −15
Original line number Diff line number Diff line
@@ -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