Инициализация модели контейнера с дочерними моделями при создании нового контейнера - например, список Todo с задачами по умолчанию

Я пытаюсь создать список дел как часть приложения, который используется для подсказки пользователю, что он должен выполнить, прежде чем приложение будет оценено. Для этого я создал модель TaskList и модель Task, принадлежащую TaskList.

Когда я создаю новый экземпляр TaskList (в новом приложении), я хочу предварительно заполнить список некоторыми задачами по умолчанию, которые всегда будут присутствовать в каждом новом приложении. Я относительно новичок в Django и Python, поэтому я просто ищу толчок в правильном направлении.

Есть ли какая-то функция инициализации модели Django, которую я могу переопределить на TaskList, чтобы создать эти задачи по умолчанию?

Вы можете либо загрузить исходные данные вместе с миграциями , либо предоставить отдельные приспособления с manage.py loaddata fixturefile.json:

https://docs.djangoproject.com/en/dev/howto/initial-data/

Я бы предложил использовать приспособления до тех пор, пока вы просто заполняете инициалы и не изменяете существующие данные каким-либо образом. В этом случае начальная загрузка будет необязательным шагом и может быть пропущена в производственных/тестовых средах (миграции всегда обязательны для выполнения).

EDIT: На самом деле вам нужно использовать функциональность Django Signals (конкретно django.db.models.signals.post_save model signal):

@receiver(post_save, sender=AssessmentTaskList)
def pre_populate_tasks(sender, instance: AssessmentTaskList, created: bool = False, **kwargs):
    if created:
        # put the pre-filled tasks here
        default_tasks = [Task(task_list=instance, ...)]
        Task.objects.bulk_create(default_tasks)
Вернуться на верх