Django вставляет данные по умолчанию после миграции

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

ему нужно обрабатывать такие ситуации, как после добавления новой таблицы он добавляет к нему данные по умолчанию.

Ответ 1

Обновить:

большинство пользователей ищут миграцию данных, как это предлагается @durdenk в fooobar.com/questions/1257370/.... Но OP спрашивал о способе добавления данных после миграции, поэтому это принятый ответ.

Оригинальный ответ:

Я думаю, что вы ищете, это fixtures https://docs.djangoproject.com/en/1.10/howto/initial-data/

Из документов

Иногда полезно предварительно заполнить базу данных жестко закодированными данными при первой настройке приложения. Вы можете предоставить исходные данные с помощью приборов.

Также прочитайте этот https://code.djangoproject.com/wiki/Fixtures

Ответ 2

Вам нужно создать пустой файл миграции и сделать свой материал в блоке операций, как описано в документах.

Миграции данных

Помимо изменения схемы базы данных, вы также можете использовать миграции для изменения данных в самой базе данных в сочетании с схемой, если хотите.

Теперь все, что вам нужно сделать, это создать новую функцию и использовать RunPython

Документы объясняют это примером, чтобы показать, как общаться с вашими моделями.

Из Документов

Чтобы создать пустой файл миграции,

python manage.py makemigrations --empty yourappname

И это пример обновления обновленного поля.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

def combine_names(apps, schema_editor):
    # We can't import the Person model directly as it may be a newer
    # version than this migration expects. We use the historical version.
    Person = apps.get_model("yourappname", "Person")
    for person in Person.objects.all():
        person.name = "%s %s" % (person.first_name, person.last_name)
        person.save()

class Migration(migrations.Migration):
    initial = True

    dependencies = [
        ('yourappname', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(combine_names),
    ]

Ответ 3

Принятый ответ в порядке. Но, поскольку OP задал вопрос в контексте добавления новых строк, а не обновления существующих записей. Вот фрагмент кода для добавления новых записей:

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('loginmodule', '0002_login_avatar'),
    ]

    def insertData(apps, schema_editor):
     Login = apps.get_model('loginmodule', 'Login')
     user = Login(name = "admin", login_id = "admin", password = "password", email = "[email protected]", type = "Admin", avatar="admin.jpg")
     user.save()


    operations = [
        migrations.RunPython(insertData),
    ]

Ответ 4

Ответ дан выше, чтобы показать, как вставить новые строки в таблицу.

from django.db import migrations, models
from yourapp.models import <yourmodel>

def combine_names(apps, schema_editor):
    obj = <yourmodel>(arrib=value)
    obj.save()

Например, допустим, у вас есть модель Person

person = Person(first_name='raj', last_name='shah')
person.save()