def METHOD_NAME(self, old):
    def getvalue(base, attribute):
        result = getattr(base, attribute)
        if result is None:
            return ""
        # Use slug for Category instances
        return getattr(result, "slug", result)
    tracked = (
        ("slug", Change.ACTION_RENAME_CATEGORY),
        ("category", Change.ACTION_MOVE_CATEGORY),
        ("project", Change.ACTION_MOVE_CATEGORY),
    )
    for attribute, action in tracked:
        old_value = getvalue(old, attribute)
        current_value = getvalue(self, attribute)
        if old_value != current_value:
            Change.objects.create(
                action=action,
                old=old_value,
                target=current_value,
                project=self.project,
                user=self.acting_user,
            )