2016-03-02 70 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), 
    ]