Как я могу написать исходные данные для django 1.8

Я хочу иметь исходные данные для таких таблиц, как Users and Options.

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

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

Если я сделаю это как 0011_initial_data и помещу его в другую миграцию, то он потеряется в длинном списке миграции, и новому пользователю будет нелегко увидеть, что это такое. а также, если кто-то раздавит миграцию, никто не узнает, есть ли там какие-то данные.

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

Это пример кода с их сайта. Но куда его поместить, чтобы не перепутать

# -*- coding: utf-8 -*-
from django.db import models, migrations

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):

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

    operations = [
        migrations.RunPython(combine_names),
    ]

person user3214546    schedule 11.05.2015    source источник
comment
Вот ответ: stackoverflow.com/a/25981899/548165   -  person catavaran    schedule 11.05.2015
comment
@catavaran я хочу, чтобы эта миграция была отделена от другой миграции. В этих вопросах они просто хранят фикстуру в отдельной папке, но миграция по-прежнему выполняется с другими файлами.   -  person user3214546    schedule 11.05.2015
comment
@user3214546 user3214546 Это невозможно, Django не поддерживает несколько папок миграции для одного приложения.   -  person knbk    schedule 11.05.2015


Ответы (1)


Как сказал @knbk, вы не можете перенести миграцию из ее местоположения. Однако, если вы хотите, чтобы ваша миграция выполнялась между другими миграциями, но при этом данные фикстуры находились в отдельном файле, вы можете сделать это:

from django.core.management import call_command
from django.db import models, migrations


class Migration(migrations.Migration):

    def load_data(apps, schema_editor):
        call_command("loaddata", "initial_data.json")

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

    operations = [
        migrations.RunPython(load_data),
    ]

Django будет искать файл приспособления так же, как всегда, и ваши данные загружаются при переносе базы данных.

person Jorick Spitzen    schedule 11.05.2015
comment
предположим, что после выполнения этой миграции я изменю данные в файле приспособления, что тогда произойдет. как снова будет выполняться та же миграция - person user3214546; 12.05.2015
comment
Вы можете вернуться к миграции до переноса данных, затем просто вызовите команду migrate, и миграция будет применена повторно вместе со всеми последующими миграциями. docs.djangoproject.com/en/1.8/ref /джанго-админ/ - person Jorick Spitzen; 12.05.2015