Commit 2061b3f3 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Undo [7474]. I didn't think it through nearly carefully enough.

This means that all model construction now goes through the __init__() method
again.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7504 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 14d6ee2d
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -237,32 +237,6 @@ class Model(object):
                raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
        dispatcher.send(signal=signals.post_init, sender=self.__class__, instance=self)

    def from_sequence(cls, values):
        """
        An alternate class constructor, primarily for internal use.

        Creates a model instance from a sequence of values (which corresponds
        to all the non-many-to-many fields in creation order. If there are more
        fields than values, the remaining (final) fields are given their
        default values.

        ForeignKey fields can only be initialised using id values, not
        instances, in this method.
        """
        dispatcher.send(signal=signals.pre_init, sender=cls, args=values,
                kwargs={})
        obj = Empty()
        obj.__class__ = cls
        field_iter = iter(obj._meta.fields)
        for val, field in izip(values, field_iter):
            setattr(obj, field.attname, val)
        for field in field_iter:
            setattr(obj, field.attname, field.get_default())
        dispatcher.send(signal=signals.post_init, sender=cls, instance=obj)
        return obj

    from_sequence = classmethod(from_sequence)

    def __repr__(self):
        return smart_str(u'<%s: %s>' % (self.__class__.__name__, unicode(self)))

+2 −2
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ class QuerySet(object):
                obj, _ = get_cached_row(self.model, row, index_start,
                        max_depth, requested=requested)
            else:
                obj = self.model.from_sequence(row[index_start:])
                obj = self.model(*row[index_start:])
            for i, k in enumerate(extra_select):
                setattr(obj, k, row[i])
            yield obj
@@ -655,7 +655,7 @@ def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0,

    restricted = requested is not None
    index_end = index_start + len(klass._meta.fields)
    obj = klass.from_sequence(row[index_start:index_end])
    obj = klass(*row[index_start:index_end])
    for f in klass._meta.fields:
        if (not f.rel or (not restricted and f.null) or
                (restricted and f.name not in requested) or f.rel.parent_link):