I'm sure you could do it at the PostgreSQL level with a trigger, which you could add to a Django initial-SQL file so it's automatically created at syncdb.
At the Django model level, in order to get a useful answer you'll have to clarify why you're opposed to overriding the save() method, since that is currently the correct (and perhaps only) way to provide this kind of validation.
Django 1.2 will (hopefully) include a full model validation framework.