zoukankan      html  css  js  c++  java
  • Wagtail 批量导入内容数据

    前言

    在使用 Wagtail 重构团队知识库时遇到一个需求:将原来知识库 6000 多条内容数据导入 Wagtail 中。

    原本以为是个简单的导出导入过程,结果也折腾了半天——Wagtail 没有符合要求的插件, 标题和内容分在不同的表等等。

    最后是通过命令的方式一次性导入,以下是操作记录:

    过程

    1、数据准备及格式化
    笔者通过 Navicat 将原来知识库的数据导出,只保留标题 title 和内容字段 content,另存为 cvs 格式。

    2、新建命令脚本
    app 目录下新建文件夹及脚本文件: management/commands/importpage.py。

    3、编辑命令脚本

    import csv
    import sys
    from django.core.management.base import BaseCommand
    from wikicore.models import WikiIndexPage, WikiPage
    
    csv.field_size_limit(sys.maxsize)  # 防止 csv 字段限制的错误
    
    
    class Command(BaseCommand):
    
        def handle(self, *args, **options):
            wiki_index_page = WikiIndexPage.objects.get(page_ptr_id=4)  # 父页面对象
            reader = csv.DictReader(open("wiki_page.csv"))   # csv 绝对路径
            for row in reader:
                wiki_page = WikiPage(
                    title=row["title"],
                    date="2021-3-3",    #  笔者 model 中定义的 date 不能为空
                    body=row["content"]
                )
                wiki_index_page.add_child(instance=wiki_page)
                wiki_page.save_revision().publish()
                print("published wiki page " + row["title"])
    
    

    4、执行命令

    (.env) $ python manage.py importpage
    published wiki page Home
    published wiki page 模板
    ......
    

    等待程序执行完,数据的导入也就完成了。

    总结

    进入 django shell 可以这样添加条目,但如此批量添加就不太现实;通过脚本方式,遍历数据源添加导入就方便太多,也自动处理了每个条目中 url 字段的数据。

    参考链接:
    https://stackoverflow.com/questions/64733059/importing-bulk-creating-pages-in-django-wagtail
    https://gist.github.com/tomdyson/ef8c2f684620b84feaddfd7454e09647

  • 相关阅读:
    git 文件回退
    git reset
    开源
    android json js 算法 面试
    Android* 2.3.7
    Sqoop HBase Hadoop
    行业案例、技术



  • 原文地址:https://www.cnblogs.com/nnylee/p/14485932.html
Copyright © 2011-2022 走看看