A verificação nãoself.pk == None
é suficiente para determinar se o objeto será inserido ou atualizado no banco de dados.
O Django O / RM apresenta um hack especialmente desagradável, que é basicamente verificar se há algo na posição PK e, se for o caso, fazer um UPDATE, caso contrário, faça um INSERT (isso é otimizado para um INSERT se o PK for Nenhum).
A razão pela qual isso deve ser feito é porque você tem permissão para definir a PK quando um objeto é criado. Embora não seja comum quando você tem uma coluna de sequência para a chave primária, isso não vale para outros tipos de campos de chave primária.
Se você realmente quer saber, precisa fazer o que o O / RM faz e procurar no banco de dados.
Claro que você tem um caso específico em seu código e, para isso, é bastante provável que self.pk == None
você tudo o que você precisa saber diz, mas é não uma solução geral.
UUIDField pk