Всякий раз, когда создается новый пользователь, я хочу создать "стартовый набор" записей для этого пользователя, который будет одинаковым для всех пользователей.
Я прочитал документы для Django, которые указывают на использование Fixtures или SQL при создании приложения. Но я хочу добавлять один и тот же прибор каждый раз, когда добавляется новый пользователь. Я не вижу простой способ сделать это. Я думаю, что signal.py может быть способом сделать это, но я не могу понять, как убедиться, что Fixture добавлен без идентификатора.
Документы для фикстур: https://docs.djangoproject.com/en/dev/howto/initial-data/
Например, есть 5 задач, которые предлагаются для каждого пользователя. Поэтому каждый раз, когда создается новый пользователь, я хочу, чтобы эти задачи добавлялись в учетную запись нового пользователя. Задачи имеют FK для пользователя.
Я открыт для предложения о том, как это сделать.
1 ответ
Существует довольно простой способ сделать это.
Создайте ваши начальные данные где-то. Любое логическое место хорошо.
Создать сигнал: https://docs.djangoproject.com/en/dev/ref/signals/
Установите класс отправителя в django.contrib.auth.models.User
Метод, вызываемый по сигналу, получает экземпляр объекта в качестве одного из параметров. В этом сигнале вы, к сожалению, не можете проверить, является ли пользователь новым пользователем, поэтому вы должны проверить, имеет ли пользователь модели "стартового комплекта", связанные с ним, с помощью внешнего ключа или нет. Если они этого не делают, то создайте свои собственные модели на основе ваших исходных данных.
Другой способ сделать это - расширить django.contrib.auth.models.User и добавить свой собственный сигнал в его метод save, который вызывается только при сохранении пользователя без pk. В этом случае вы можете быть уверены, что каждый раз, когда вызывается сигнал, вы должны создать новый "стартовый набор".