Como evito que os equipamentos conflitem com o código de sinal do django post_save?

No meu aplicativo, desejo criar entradas em determinadas tabelas quando um novo usuário se inscrever. Por exemplo, quero criar um perfil de usuário que faça referência à empresa e alguns outros registros para eles. Eu implementei isso com um sinal post_save:

def callback_create_profile(sender, **kwargs):
    # check if we are creating a new User
    if kwargs.get('created', True):
        user = kwargs.get('instance')
        company = Company.objects.create(name="My Company")
        employee = Employee.objects.create(company=company, name_first=user.first_name, name_last=user.last_name)
        profile = UserProfile.objects.create(user=user, employee=employee, partner=partner)
# Register the callback
post_save.connect(callback_create_profile, sender=User, dispatch_uid="core.models")

Isso funciona bem quando executado. Posso usar o administrador para criar um novo usuário e as outras três tabelas também recebem entradas sensíveis. (Exceto, o funcionário desde o nome do usuário e o nome do usuário não é preenchido no formulário do administrador quando ele é salvo. Ainda não entendo por que isso é feito)

O problema surgiu quando eu executei minha suíte de testes. Antes disso, eu havia criado vários equipamentos para criar essas entradas nas tabelas. Agora eu recebo um erro que afirma:

IntegrityError: duplicate key value violates unique constraint "core_userprofile_user_id_key"

Acho que é porque eu já criei uma empresa, funcionário e perfil no dispositivo com o ID "1" e agora o sinal post_save está tentando recriá-lo.

Minhas perguntas são: posso desativar esse sinal post_save ao executar equipamentos? Posso detectar que estou executando como parte do conjunto de testes e não criar esses registros? Devo excluir esses registros dos equipamentos agora (embora o sinal apenas defina os padrões, não os valores que eu quero testar)? Por que o código de carregamento do aparelho apenas substitui os registros criados?

Como as pessoas fazem isso?

questionAnswers(4)

yourAnswerToTheQuestion