Files
server/base/seeder.py
T
ngfchl 777ca50328 update. 完成前端页面展示、列表和详情页
update. 调整融合主菜单与板块
update. 分离新闻模块
2026-04-01 14:17:03 +08:00

108 lines
3.3 KiB
Python

import os
import sys
import django
from loguru import logger
from pypinyin import lazy_pinyin, Style
# 配置 Django 环境
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings") # 修改为你的 settings 路径
django.setup()
from faker import Faker
from base.models import MainMenu
# 初始化 Faker,设置中文(如果需要中文名)
# 初始化 Faker (zh_CN 生成中文数据)
fake = Faker('zh_CN')
# --- 核心数据结构:定义你的菜单层级 ---
MENU_STRUCTURE = {
"信息公开": [
"通知通告", "法律法规", "政策文件", "政策解读"
],
"党建引领": [
"党建工作", "党建轮播", "党风廉政", "先进典型"
],
"互动交流": [
"专家访谈", "调查征集", "在线咨询"
],
"消防科普": [
"数字消防", "火灾预防", "自救逃生"
],
"办事服务": [
"办事指南", "政务服务", "资料下载", "办事统计"
]
}
def get_slug(text):
"""
将中文转换为拼音 Slug
例如: "信息公开" -> "xin-xi-gong-kai"
"""
# lazy_pinyin 返回拼音列表,join 将其用 '-' 连接
return "-".join(lazy_pinyin(text, style=Style.NORMAL))
def seed_main_menu():
logger.info("🚀 开始生成站点导航数据...")
# 1. 清空旧数据 (可选,如果需要重置数据请取消注释)
MainMenu.objects.all().delete()
logger.info("🧹 已清空旧数据")
created_count = 0
# 2. 循环创建主菜单和子板块
for main_title, sub_titles in MENU_STRUCTURE.items():
# --- 创建主菜单 ---
# 生成唯一的 code,例如 "xin-xi-gong-kai"
main_code = get_slug(text=main_title)
logger.info(f"主菜单: [{main_title}] Code: [{main_code}]")
main_menu, created = MainMenu.objects.get_or_create(
title=main_title,
defaults={
'code': main_code,
'url': main_code, # 模拟 URL
'is_external': False,
'order': created_count,
'visible': True
}
)
if created:
logger.info(f"✅ 创建主菜单: [{main_title}]")
else:
logger.info(f"⏭️ 主菜单已存在: [{main_title}]")
# --- 创建子板块 ---
for idx, sub_title in enumerate(sub_titles):
sub_code = get_slug(text=sub_title)
logger.info(f"子菜单: [{sub_title}] Code: [{sub_code}]")
sub_menu, sub_created = MainMenu.objects.get_or_create(
title=sub_title,
parent=main_menu, # 关键:关联父级
defaults={
'code': sub_code,
'url': sub_code,
'is_external': False,
'order': idx, # 子菜单排序
'visible': True
}
)
if sub_created:
logger.info(f" └─ ✅ 创建子板块: [{sub_title}]")
else:
logger.info(f" └─ ⏭️ 子板块已存在: [{sub_title}]")
created_count += 1
logger.info(f"\n🎉 导航数据生成完毕!共处理 {len(MENU_STRUCTURE)} 个主菜单。")
if __name__ == "__main__":
seed_main_menu()