2015-05-11 4 views
2

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

Для старого 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), 
    ] 
+0

Вот ответ: http://stackoverflow.com/a/25981899/548165 – catavaran

+0

@catavaran Я хочу сохранить эту миграцию отдельно от другой миграции. В этих вопросах они просто сохраняют привязку в отдельной папке, но миграция по-прежнему связана с другими файлами. – user3214546

+0

@ user3214546 Это невозможно, Django не поддерживает несколько папок переноса для одного приложения. – knbk

ответ

4

Как @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 будет искать арматуру файл так же, как это всегда имеет и ваши данные загружаются при переносе вашего db.

+0

Предположим, что после запуска этой миграции я изменяю данные в файле fixture, и что произойдет. как снова произойдет повторная миграция – user3214546

+0

Вы можете вернуться к миграции перед миграцией данных, а затем просто выполнить миграцию и перенаправить миграцию вместе со всеми последующими миграциями. https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-migrate –