在迁移中创建集合

Posted

技术标签:

【中文标题】在迁移中创建集合【英文标题】:Create collections inside migrations 【发布时间】:2017-09-28 08:47:22 【问题描述】:

我想为创建集合创建迁移应用一个迁移。

自从python代码以来,我还不清楚创建集合的正确工作流程是什么,有人可以帮帮我吗?

【问题讨论】:

我把问题说得更清楚了。 【参考方案1】:

好的,在网上搜索我找到了两个解决方案: 一个在 google mailing list,另一个在 ***

在 shell 中测试代码后,我们可以看到它可以用于创建集合:

from wagtail.wagtailcore.models import Collection
root_coll = Collection.get_first_root_node()
root_coll.add_child(name='testcoll')

现在我们可以在迁移中使用此代码,因此,使用./manage.py makemigrations home --empty 创建一个新的空迁移并在之前的代码中添加:

from __future__ import unicode_literals

from django.db import migrations

from wagtail.wagtailcore.models import Collection


def create_collections(apps, schema_editor):
    names = [
        'video tutoriales',
        'videos personal',
        'videos varios',
        'imagenes tutoriales',
        'imagenes personal',
        'imaganes varias',
        'documentos tutoriales',
        'documentos personal',
        'documentos varios'
    ]
    # Get models

    # Get collection's root
    root_collection = Collection.get_first_root_node()

    for name in names:
        root_collection.add_child(name=name)


class Migration(migrations.Migration):
    dependencies = [
        ('home', '0002_create_homepage'),
    ]

    operations = [
        migrations.RunPython(create_collections),
    ]

首先,我们在变量中获取主节点Collection,然后添加任意数量的具有各自名称的子节点。

其实是很基础的代码。

如果有人可以优化它,欢迎您,谢谢。

【讨论】:

【参考方案2】:

这里提到的东西会起作用吗?

How to squash recent Django migrations?

python manage.py squashmigrations <appname> <squashfrom> <squashto>

问候

【讨论】:

考虑解释或阐述你的答案,以便它可以帮助其他用户,目前还不清楚它是如何解决问题的

以上是关于在迁移中创建集合的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 5 在迁移中创建了两次表

Laravel 在特定文件夹中创建迁移文件

在初始迁移期间创建的同一数据库中创建一个新的 sqlite 表

Python中创建集合的方法都有哪些呢?

在迁移 laravel 5.2 中创建数据库视图

如何在实体框架数据库迁移中创建全文目录? [复制]