Всякий раз, когда создается новый пользователь, я хочу создать "стартовый набор" записей для этого пользователя, который будет одинаковым для всех пользователей.

Я прочитал документы для 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. В этом случае вы можете быть уверены, что каждый раз, когда вызывается сигнал, вы должны создать новый "стартовый набор".

Другие вопросы по тегам