В моем приложении я хочу создавать записи в определенных таблицах, когда новый пользователь регистрируется.Например, я хочу создать профиль пользователя, который будет ссылаться на их компанию и некоторые другие записи для них.Я реализовал это с помощью сигнала 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")
Это хорошо работает при запуске.Я могу использовать администратора для создания нового пользователя, а остальные три таблицы также получают записи с разумным значением.(За исключением того, что сотрудник, так как user.first_name и user.last_name не заполняется в форме администратора при сохранении. Я до сих пор не понимаю, почему это делается так)
Проблемапришел, когда я запустил свой тестовый набор.До этого я создал несколько приборов для создания этих записей в таблицах.Теперь я получаю сообщение об ошибке:
IntegrityError: duplicate key value violates unique constraint "core_userprofile_user_id_key"
Я думаю, это потому, что я уже создал записи о компании, сотруднике и профиле в приборе с идентификатором "1", а теперь сигнал post_save пытается воссоздатьэто.
Мои вопросы: могу ли я отключить этот сигнал post_save при запуске приборов?Могу ли я определить, что я работаю как часть набора тестов, и не создавать эти записи?Должен ли я удалить эти записи из приборов сейчас (хотя сигнал устанавливает только значения по умолчанию, а не значения, которые я хочу проверить)?Почему код загрузки прибора не перезаписывает созданные записи?
Как люди это делают?