Yes, seems ugly, but maybe not that much so, if you express "digit-negate" as "subtract from 99999". :)
Another idea may be a slightly extended proposal of Maciek Dębski (
SIO-1329). I'd express it as having an additional ScoreOrderField class, which would be a "friend class" to ScoreField. They together would be able to implement the needed functionality, most notably appropriately forbidding various lookups in their get_prep_lookups, and allowing assignments only to the ScoreField. Still, I don't like it because of redundancy in the DB and quite unexpected consequences of someone inadvertently changing only one of the columns...
Take a look at AcmScore.to_repr here: https://gerrit.sio2project.mimuw.edu.pl/#/c/1744/12/oioioi/acm/score.py
I have tried to implement such ordering there (but forgot the ASC sorting).
One solution I can think of is to digit-negate the time (00123 -> 99876), but that's ugly ugly.