Ticket #15811: deep_lazy.diff

File deep_lazy.diff, 1.5 KB (added by abki, 4 years ago)

patch that deeply "copy" a class methods

  • django/utils/functional.py

     
    6767            cls.__dispatch = {}
    6868            for resultclass in resultclasses:
    6969                cls.__dispatch[resultclass] = {}
    70                 for (k, v) in resultclass.__dict__.items():
    71                     # All __promise__ return the same wrapper method, but they
    72                     # also do setup, inserting the method into the dispatch
    73                     # dict.
    74                     meth = cls.__promise__(resultclass, k, v)
    75                     if hasattr(cls, k):
    76                         continue
    77                     setattr(cls, k, meth)
     70                for type_ in reversed(resultclass.mro()):
     71                    for (k, v) in type_.__dict__.items():
     72                        # All __promise__ return the same wrapper method, but they
     73                        # also do setup, inserting the method into the dispatch
     74                        # dict.
     75                        meth = cls.__promise__(resultclass, k, v)
     76                        if hasattr(cls, k):
     77                            continue
     78                        setattr(cls, k, meth)
    7879            cls._delegate_str = str in resultclasses
    7980            cls._delegate_unicode = unicode in resultclasses
    8081            assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
Back to Top