Автоматически создавать экземпляры модели django при запуске с пустой базой данных - PullRequest
1 голос
/ 06 марта 2020

Мой django проект требует создания некоторых экземпляров модели при запуске, если они не существуют.

В настоящее время я создаю необходимые экземпляры модели, которые мне нужны в конфигурации приложения.

class MyAppConfig(AppConfig):
name = 'my_app'

def ready(self):
    create_required_objects()

def create_required_objects():
from my_app.models import MyObject
for name in MyObject.reserved_names:
    if not MyObject.objects.filter(name=name).exists():
        MyObject.objects.create(name=name, not_editable=True)

Это прекрасно работает при инициализации базы данных sqlite, однако, если я очищаю базу данных и затем пытаюсь запустить сервер, я получаю следующую ошибку:

django.db.utils.OperationalError: no such table: my_app_object

Я хотел бы иметь возможность очистить базы данных (желательно просто удалив db.sqlite3) и запустите сервер.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Использование сигнала post_migrate Создайте новый экземпляр при переносе новой базы данных.

Например: -

from django.db.models.signals import post_migrate
from my_app.models import MyObject

def create_required_objects(sender, **kwargs):

for name in MyObject.reserved_names:
    if not MyObject.objects.filter(name=name).exists():
        MyObject.objects.create(name=name, not_editable=True)

class MyAppConfig(AppConfig):
name = 'my_app'

def ready(self):
post_migrate.connect(create_required_objects ,sender=self)

этот код автоматически c создает пользователя после переноса базы данных

0 голосов
/ 06 марта 2020

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

python manage.py makemigrations
python manage.py migrate

С точки зрения заполнения данных, вы можете попробовать следующий код :

from model_bakery import baker
from my_app.models import MyObject

baker.make(MyObject)

Добавьте baker.make(MyObject) в вашу функцию create_required_objects после установки пекарни model_:
pip install model_bakery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...