Como substituir a chave primária do Django por um número inteiro diferente que é exclusivo para essa tabela

Eu tenho um aplicativo da web Django que usa os números inteiros positivos incrementados automaticamente como a chave primária. Essa chave é usada em todo o aplicativo e é frequentemente inserida no URL. Não quero expor esse número ao público para que eles possam adivinhar o número de usuários ou outras entidades no meu banco de dados.

Este é um requisito frequente e tenho visto perguntas semelhantes às minhas com respostas. A maioria das soluções recomenda o hash do valor original da chave primária. No entanto, nenhuma dessas respostas se encaixa exatamente na minha necessidade. Estes são os meus requisitos:

Eu gostaria de manter o tipo de campo Chave Primária como Inteiro.Eu também preferiria não precisar fazer hash / unhash esse valor toda vez que for lido, gravado ou comparado ao banco de dados. Isso parece um desperdício Seria bom fazer isso apenas uma vez: quando o registro é inserido inicialmente no Banco de DadosA função de hash / criptografia não precisa ser reversível, pois não preciso recuperar a chave seqüencial original. O valor do hash só precisa ser único.O valor do hash precisa ser exclusivo SOMENTE para essa tabela - não universalmente exclusivo.O valor do hash deve ser o mais curto possível. Gostaria de evitar URLs extremamente longos (mais de 20 caracteres)

Qual é a melhor maneira de conseguir isso? O seguinte trabalho?

def hash_function(int):
    return fancy-hash-function # What function should I use??


def obfuscate_pk(sender, instance, created, **kwargs):
    if created:
        logger.info("MyClass #%s, created with created=%s: %s" % (instance.pk, created, instance))
        instance.pk = hash_function(instance.pk)
        instance.save()
        logger.info("\tNew Pk=%s" % instance.pk)

class MyClass(models.Model):
    blahblah = models.CharField(max_length=50, null=False, blank=False,)


post_save.connect(obfuscate_pk, sender=MyClass)

questionAnswers(4)

yourAnswerToTheQuestion