заполнить таблицу начальными данными - PullRequest
0 голосов
/ 10 июня 2019

Я хочу предварительно заполнить некоторые таблицы исходными данными, а также изменить поля Certian. В настоящее время я делаю это путем написания пользовательских команд управления и заполнения базы данных с помощью python manage.py. Недавно я прочитал об осветительных приборах и узнал, что они используются для той же цели. Каков правильный способ сделать это, и почему или почему это не следует делать с помощью команд управления?

Пример кода в менеджменте / commands / init_test_data.py

class Command(BaseCommand):
    help = 'Initializes test data'

    @transaction.atomic
    def handle(self, *args, **kwargs):
        __location__ = os.path.realpath(os.path.join(
            os.getcwd(), os.path.dirname(__file__)))
        fname = os.path.join(__location__, 'init_test_data.json')
        with open(fname) as f:
            parsed = json.load(f)
        for tenant in parsed.get('tenants'):
            self.create_tenant(tenant)

    def create_tenant(self, tenant):
        tenant_obj = Tenant()
        tenant_obj.name = tenant["name"]
        tenant_obj.subdomain = tenant["subdomain"]
        tenant_obj.identifier = tenant["identifier"]
        tenant_obj.save()
        for org in tenant.get('organisations'):
            self.create_org(tenant_obj, org)
        admin_email = "sysadmin_" + tenant_obj.name + "@exza.com"
        admin_roles = ["tenant_system_admin", "tenant_admin"]
        self.create_user(None, tenant_obj, admin_email, admin_roles, True, True)
        for asset in tenant.get('assets'):
            self.create_dummy_asset(tenant_obj, asset.get('name'))

1 Ответ

2 голосов
/ 10 июня 2019

Светильники - действительно способ установить некоторые начальные данные.Если вы хотите выполнить более сложные операции, вы можете использовать пользовательские миграции (https://docs.djangoproject.com/en/2.2/howto/writing-migrations/)

...