def __new__(cls, name, bases, attrs): new_cls = type.__new__(cls, name, bases, attrs) if name in ("Model", "NewBase"): return new_cls mapper_class = getattr(new_cls, "Mapper", None) or getattr(new_cls, "Meta", None) bases = [] if mapper_class is not None: bases.append(mapper_class) if not isinstance(mapper_class, new_cls.mapper_class): bases.append(new_cls.mapper_class) NewMapper = type("{}Mapper".format(new_cls.__name__), tuple(bases), {}) NewMapper(new_cls) for k in to_tuple(mapper_registry[new_cls].pk): setattr(new_cls, k, None) return new_cls
def __hash__(self): if not all(to_tuple(self._get_pk())): raise TypeError("Model instances without primary key value are unhashable") return hash(self._get_pk())