为django app提供初始数据

595 阅读1分钟

根据Providing initial data for models,为原本想用数据库导出的sql,在app目录下建立sql目录,然后增加modelname.sql的文件,根据文档所说会在syncdb期间create table之后自动执行这个目录下的sql,但不知道是sql语句不符合要求还是怎样,总之没成功,即使我又删除了表用migrate命令也是。 反正这个特性django 2.0以后也不会支持,所以还是尝试采用正确的姿势吧。于是 根据下面两份资料结合Providing initial data for models我用了几个步骤搞定了。 Initial data and install-time code Prefer data migrations to initial data 1.

./manage.py dumpdata yourappname > init.json

在app文件夹下创建fixtures,将init.json放进来。 2.

./manage.py datamigration myapp mymigrationname

app的migrations文件夹下会多出xxxx_mymigrationname.py的文件,打开编辑。

def forwards(self, orm):
    from django.core.management import call_command
    call_command('loaddata', 'init.json')

3. 执行./manage.py migrate xlinks,然后就会执行新的mirgration Initial data and install-time code这篇文章说可以用initial_data命名的fixture file,在syncdb的时候执行,由于我已经创建好数据结构了,所以只好再增加个datamigration来执行migrate,那种方法也就没尝试。