I think this is actually fine. I think the most important thing is to be clear about what the invariants are, and be consistent: e.g. that an unsaved instance is considered to have ``None`` for all ``previous()`` field values, and ``has_changed`` simply compares ``previous()`` with the current attribute value.