2016-03-02 56 views
3

我有一個新的Django項目沒有遷移之前,因此我想創建我的第一次遷移,將一些行插入到表中。這是我還沒有:如何在django數據遷移中創建新對象?

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

from django.db import migrations, models 


def create_types(apps, schema_editor): 
    Type = apps.get_model("core", "Type") 
    type = Type() 


class Migration(migrations.Migration): 

    dependencies = [ 
    ] 

    operations = [ 
     migrations.RunPython(create_types) 
    ] 

我有有一個名爲類型模型的應用程序的核心,我想創建幾個類型,併爲他們設置屬性,和他們都保存到數據庫中。如何在這裏創建一個Type對象的新對象? 還有其他問題,如果這是第一次遷移我可以離開依賴項爲空?我用本教程創建的文件https://docs.djangoproject.com/en/1.8/topics/migrations/#data-migrations將其命名爲0001_initial.py

編輯:解決了,創建了這樣的模型,我的作品。

Type = apps.get_model("core", "Type") 
    type = Type() 
type.prop = '..' 
type.save() 

回答

0

首先,這不能是第一次遷移,因爲您需要一個實際創建您的類型表。你至少需要依靠那個。其次,一旦你有了類型模型,你可以像在普通的Django代碼中那樣對待它;實例化它,設置它的屬性,保存它,不管。

+0

1.這確實是我的第一個移民,我創建的模型,然後運行遷移 - 我的項目中創建但意外刪除了遷移文件,因此我再次運行遷移,看起來像之前沒有遷移。真的,我所有創建的應用程序都將遷移文件夾清空。 2.第二點,在DOC中,建議像我一樣創建類型,它位於鏈接附件中。 – Pink

+0

第一點你是對的,我運行遷移,但我只用「信念」來調用它,它會遷移我的所有應用程序,但事實並非如此。我必須爲我的所有應用程序單獨運行makemigrations,現在沒關係,所以只需要處理像'普通Django代碼'這樣的模型是否正確的問題。謝謝。 – Pink

+0

答案是肯定的,這意味着你實際上需要保存它。 –

1

我遵循的模式是先從最初的遷移:

> python manage.py makemigrations 

這在遷移到建立自己的表。

接下來,我創建一個空遷移數據:

> python manage.py makemigrations --empty core 

然後我編輯使用的RunPython功能的數據遷移新創建的遷移文件。相比於其他的答案在這裏文檔的模式稍有不同:

https://docs.djangoproject.com/en/1.11/ref/migration-operations/

def create_types(apps, schema_editor): 
    db_alias = schema_editor.connection.alias 
    Type = apps.get_model("core", "Type") 
    Type.objects.using(db_alias).create(property=value) 

class Migration(migrations.Migration): 

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

    operations = [ 
     migrations.RunPython(create_types), 
    ]