import_red_spots.py 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. from django.core.management.base import BaseCommand
  2. from ai_planner.models import Attraction, City
  3. import os
  4. from django.core.files import File
  5. class Command(BaseCommand):
  6. help = '导入所有红色旅游景点数据到Attraction表(含图片)'
  7. def handle(self, *args, **options):
  8. # 处理门票价格转换
  9. def parse_ticket_price(ticket_info):
  10. if "免费" in ticket_info:
  11. return 0
  12. try:
  13. # 提取数字部分
  14. price_str = ''.join(filter(str.isdigit, ticket_info))
  15. return float(price_str) if price_str else 0
  16. except:
  17. return 0
  18. # 更健壮的城市名称提取方法
  19. def get_city_name(location):
  20. shandong_cities = [
  21. '济南市', '青岛市', '淄博市', '枣庄市', '东营市',
  22. '烟台市', '潍坊市', '济宁市', '泰安市', '威海市',
  23. '日照市', '临沂市', '德州市', '聊城市', '滨州市',
  24. '菏泽市'
  25. ]
  26. for city in shandong_cities:
  27. if city in location:
  28. return city
  29. return '济南市'
  30. # 图片存储基础路径(根据实际路径修改)
  31. IMAGE_BASE_PATH = r"G:\其他\jingdian\image+name"
  32. # 所有红色景点数据(保持不变)...
  33. red_spots_data = [
  34. {
  35. "name": "台儿庄大战纪念馆",
  36. "category": "memorial",
  37. "location": "山东省枣庄市台儿庄区沿河南路6号",
  38. "description": "台儿庄大战纪念馆是为纪念1938年台儿庄战役而建,展示了大量珍贵的历史照片和文物。",
  39. "history": "台儿庄战役是抗日战争初期中国军队在山东省南部台儿庄地区抗击日军的重大胜利,是中国军队在正面战场取得的首次重大胜利。",
  40. "open_time": "全年开放 8:30-17:30",
  41. "ticket_info": "免费开放",
  42. "short_desc": "纪念1938年台儿庄战役的专题纪念馆",
  43. "tags": ["memorial", "红色旅游"],
  44. "is_featured": True
  45. },
  46. {
  47. "name": "孟良崮战役遗址",
  48. "category": "revolution",
  49. "location": "山东省临沂市蒙阴县垛庄镇",
  50. "description": "孟良崮战役遗址是解放战争时期著名的孟良崮战役发生地,现建有纪念馆和烈士陵园。",
  51. "history": "1947年5月,华东野战军在陈毅、粟裕指挥下,全歼国民党军整编第74师,击毙师长张灵甫,是解放战争中的重要转折点。",
  52. "open_time": "8:30-17:00",
  53. "ticket_info": "门票50元",
  54. "short_desc": "解放战争重要战役遗址",
  55. "tags": ["revolution", "红色旅游"],
  56. "is_featured": True
  57. },
  58. {
  59. "name": "华东革命烈士陵园",
  60. "category": "martyrs",
  61. "location": "山东省临沂市兰山区陵园前街4号",
  62. "description": "华东革命烈士陵园是为纪念在抗日战争和解放战争中牺牲的华东地区革命烈士而建。",
  63. "history": "建于1949年,安葬着包括罗炳辉、王麓水等著名烈士在内的6万余名革命烈士。",
  64. "open_time": "8:00-17:00",
  65. "ticket_info": "免费开放",
  66. "short_desc": "安葬6万余名革命烈士的陵园",
  67. "tags": ["martyrs", "红色旅游"],
  68. "is_featured": True
  69. },
  70. {
  71. "name": "沂蒙革命纪念馆",
  72. "category": "museum",
  73. "location": "山东省临沂市兰山区银雀山路与沂蒙路交汇处",
  74. "description": "沂蒙革命纪念馆全面展示了沂蒙革命老区的光荣历史和沂蒙精神的形成发展过程。",
  75. "history": "沂蒙山区是抗日战争和解放战争时期重要的革命根据地之一,涌现出'红嫂'等众多感人事迹。",
  76. "open_time": "周二至周日 9:00-16:30",
  77. "ticket_info": "免费开放",
  78. "short_desc": "展示沂蒙革命老区历史的专题纪念馆",
  79. "tags": ["museum", "红色旅游"],
  80. "is_featured": True
  81. },
  82. {
  83. "name": "铁道游击队纪念园",
  84. "category": "memorial",
  85. "location": "山东省枣庄市薛城区临山路",
  86. "description": "铁道游击队纪念园是为纪念抗日战争时期活跃在鲁南地区的铁道游击队而建。",
  87. "history": "铁道游击队是抗日战争时期鲁南地区著名的抗日武装,以扒火车、打游击著称,小说《铁道游击队》即以此为原型。",
  88. "open_time": "8:30-17:30",
  89. "ticket_info": "门票30元",
  90. "short_desc": "纪念抗日战争时期铁道游击队的专题园区",
  91. "tags": ["memorial", "红色旅游"],
  92. "is_featured": True
  93. },
  94. {
  95. "name": "胶东革命纪念馆",
  96. "category": "museum",
  97. "location": "山东省烟台市芝罘区南大街61号",
  98. "description": "胶东革命纪念馆展示了胶东地区党组织创建、发展和领导人民进行革命斗争的历史。",
  99. "history": "胶东地区是山东党组织活动较早的地区之一,在抗日战争和解放战争中做出了重要贡献。",
  100. "open_time": "周二至周日 9:00-16:30",
  101. "ticket_info": "免费开放",
  102. "short_desc": "展示胶东地区革命历史的专题纪念馆",
  103. "tags": ["museum", "红色旅游"],
  104. "is_featured": True
  105. },
  106. {
  107. "name": "沂蒙山小调诞生地",
  108. "category": "revolution",
  109. "location": "山东省临沂市费县薛庄镇",
  110. "description": "《沂蒙山小调》诞生地是这首著名革命歌曲的创作地,现建有纪念设施。",
  111. "history": "1940年,抗大一分校文工团在此创作了《沂蒙山小调》,后成为歌颂沂蒙革命精神的代表性歌曲。",
  112. "open_time": "8:30-17:00",
  113. "ticket_info": "门票20元",
  114. "short_desc": "著名革命歌曲《沂蒙山小调》的创作地",
  115. "tags": ["revolution", "红色旅游"],
  116. "is_featured": True
  117. },
  118. {
  119. "name": "鲁南人民抗日武装起义纪念馆",
  120. "category": "memorial",
  121. "location": "山东省枣庄市山亭区北庄镇",
  122. "description": "纪念馆展示了1938年鲁南人民抗日武装起义的历史和意义。",
  123. "history": "1938年5月,中共苏鲁豫皖边区特委领导发动鲁南人民抗日武装起义,创建了鲁南抗日根据地。",
  124. "open_time": "周二至周日 9:00-16:30",
  125. "ticket_info": "免费开放",
  126. "short_desc": "纪念1938年鲁南人民抗日武装起义的专题馆",
  127. "tags": ["memorial", "红色旅游"],
  128. "is_featured": True
  129. },
  130. {
  131. "name": "大青山突围战遗址",
  132. "category": "revolution",
  133. "location": "山东省临沂市费县薛庄镇",
  134. "description": "大青山突围战遗址是抗日战争时期著名的突围战发生地,现建有纪念碑和纪念馆。",
  135. "history": "1941年11月,抗大一分校及中共山东分局、省战工会等机关在此成功突围,粉碎了日军的'铁壁合围'",
  136. "open_time": "8:30-17:00",
  137. "ticket_info": "门票30元",
  138. "short_desc": "抗日战争时期著名突围战遗址",
  139. "tags": ["revolution", "红色旅游"],
  140. "is_featured": True
  141. },
  142. {
  143. "name": "胶东抗日烈士陵园",
  144. "category": "martyrs",
  145. "location": "山东省烟台市牟平区龙泉镇",
  146. "description": "胶东抗日烈士陵园是为纪念在胶东抗日斗争中牺牲的烈士而建。",
  147. "history": "建于1945年,安葬着包括理琪、林江等著名烈士在内的数千名抗日烈士。",
  148. "open_time": "8:00-17:00",
  149. "ticket_info": "免费开放",
  150. "short_desc": "纪念胶东抗日斗争中牺牲烈士的陵园",
  151. "tags": ["martyrs", "红色旅游"],
  152. "is_featured": True
  153. },
  154. {
  155. "name": "八路军115师司令部旧址",
  156. "category": "revolution",
  157. "location": "山东省临沂市莒南县大店镇",
  158. "description": "八路军115师司令部旧址是抗日战争时期115师司令部的驻地,现为全国重点文物保护单位。",
  159. "history": "1941年3月至1945年9月,八路军115师司令部驻扎于此,罗荣桓等曾在此办公。",
  160. "open_time": "8:30-17:00",
  161. "ticket_info": "门票40元",
  162. "short_desc": "抗日战争时期八路军115师司令部驻地",
  163. "tags": ["revolution", "红色旅游"],
  164. "is_featured": True
  165. },
  166. {
  167. "name": "红嫂纪念馆",
  168. "category": "memorial",
  169. "location": "山东省临沂市沂南县马牧池乡",
  170. "description": "红嫂纪念馆是为纪念沂蒙红嫂明德英等革命妇女而建,展示了红嫂们的感人事迹。",
  171. "history": "抗日战争时期,沂蒙山区涌现出许多像明德英这样的'红嫂',她们用乳汁救治伤员,谱写了军民鱼水情的感人篇章。",
  172. "open_time": "8:30-17:00",
  173. "ticket_info": "门票30元",
  174. "short_desc": "纪念沂蒙红嫂感人事迹的专题馆",
  175. "tags": ["memorial", "红色旅游"],
  176. "is_featured": True
  177. },
  178. {
  179. "name": "山东省政府旧址",
  180. "category": "revolution",
  181. "location": "山东省临沂市莒南县大店镇",
  182. "description": "山东省政府旧址是抗日战争时期山东省政府所在地,现为全国重点文物保护单位。",
  183. "history": "1945年8月13日,山东省政府在此成立,是中国共产党领导的第一个省级人民政府。",
  184. "open_time": "8:30-17:00",
  185. "ticket_info": "门票30元",
  186. "short_desc": "中国共产党领导的第一个省级政府旧址",
  187. "tags": ["revolution", "红色旅游"],
  188. "is_featured": True
  189. },
  190. {
  191. "name": "徂徕山抗日武装起义旧址",
  192. "category": "revolution",
  193. "location": "山东省泰安市岱岳区徂徕镇",
  194. "description": "徂徕山抗日武装起义旧址是1938年1月徂徕山抗日武装起义的发生地。",
  195. "history": "1938年1月1日,中共山东省委在此领导发动徂徕山抗日武装起义,打响了山东省委独立领导山东抗战的第一枪。",
  196. "open_time": "8:30-17:00",
  197. "ticket_info": "门票20元",
  198. "short_desc": "1938年徂徕山抗日武装起义发生地",
  199. "tags": ["revolution", "红色旅游"],
  200. "is_featured": True
  201. },
  202. {
  203. "name": "黑铁山抗日武装起义旧址",
  204. "category": "revolution",
  205. "location": "山东省淄博市张店区卫固镇",
  206. "description": "黑铁山抗日武装起义旧址是1937年12月黑铁山抗日武装起义的发生地。",
  207. "history": "1937年12月26日,中共山东省委在此领导发动黑铁山抗日武装起义,是山东最早的抗日武装起义之一。",
  208. "open_time": "8:30-17:00",
  209. "ticket_info": "门票20元",
  210. "short_desc": "1937年黑铁山抗日武装起义发生地",
  211. "tags": ["revolution", "红色旅游"],
  212. "is_featured": True
  213. },
  214. {
  215. "name": "天福山起义纪念馆",
  216. "category": "memorial",
  217. "location": "山东省威海市文登区文登营镇",
  218. "description": "天福山起义纪念馆是为纪念1937年12月天福山起义而建。",
  219. "history": "1937年12月24日,中共胶东特委在此领导发动天福山起义,创建了山东人民抗日救国军第三军。",
  220. "open_time": "周二至周日 9:00-16:30",
  221. "ticket_info": "免费开放",
  222. "short_desc": "纪念1937年天福山起义的专题馆",
  223. "tags": ["memorial", "红色旅游"],
  224. "is_featured": True
  225. },
  226. {
  227. "name": "马石山十勇士纪念馆",
  228. "category": "memorial",
  229. "location": "山东省威海市乳山市马石山",
  230. "description": "马石山十勇士纪念馆是为纪念在1942年反'扫荡'中英勇牺牲的十位八路军战士而建。",
  231. "history": "1942年冬,十位八路军战士为掩护群众突围,与日军激战后全部壮烈牺牲,谱写了气壮山河的英雄赞歌。",
  232. "open_time": "8:30-17:00",
  233. "ticket_info": "免费开放",
  234. "short_desc": "纪念1942年十位英勇牺牲的八路军战士",
  235. "tags": ["memorial", "红色旅游"],
  236. "is_featured": True
  237. },
  238. {
  239. "name": "沂蒙革命根据地旧址群",
  240. "category": "revolution",
  241. "location": "山东省临沂市沂南县",
  242. "description": "沂蒙革命根据地旧址群包括中共山东分局、八路军115师司令部、山东省战工会等多处革命旧址。",
  243. "history": "抗日战争和解放战争时期,沂蒙山区是山东党政军领导机关所在地,被誉为'山东的小延安'",
  244. "open_time": "8:30-17:00",
  245. "ticket_info": "联票60元",
  246. "short_desc": "包含多处重要革命旧址的遗址群",
  247. "tags": ["revolution", "红色旅游"],
  248. "is_featured": True
  249. },
  250. {
  251. "name": "济南战役纪念馆",
  252. "category": "memorial",
  253. "location": "济南市市中区英雄山路18号",
  254. "description": "全国爱国主义教育示范基地,全景展示济南战役历史进程,含全景画馆、文物陈列厅等。",
  255. "history": "1948年9月16-24日,华东野战军经8昼夜激战攻克济南,揭开战略决战序幕。纪念馆2003年正式开放。",
  256. "open_time": "周二至周日 9:00-16:30(周一闭馆)",
  257. "ticket_info": "凭身份证免费参观",
  258. "short_desc": "全景展示济南战役历史的纪念馆",
  259. "tags": ["memorial", "红色旅游"],
  260. "is_featured": True
  261. },
  262. {
  263. "name": "解放阁",
  264. "category": "memorial",
  265. "location": "济南市历下区黑虎泉北路",
  266. "description": "济南战役突破城垣遗址上建立的纪念性建筑,登阁可俯瞰护城河及老城区。",
  267. "history": "原为济南城墙东南角,1948年解放军由此突破。1965年建阁,1986年改建为战役纪念建筑。",
  268. "open_time": "8:30-17:00",
  269. "ticket_info": "免费开放",
  270. "short_desc": "济南战役突破城垣遗址纪念建筑",
  271. "tags": ["memorial", "红色旅游"],
  272. "is_featured": True
  273. },
  274. {
  275. "name": "英雄山革命烈士陵园",
  276. "category": "martyrs",
  277. "location": "济南市市中区英雄山路18号",
  278. "description": "安葬着1502名革命烈士,包括山东早期中共领导人刘谦初等,建有烈士纪念塔和悼念广场。",
  279. "history": "始建于1949年,1968年毛泽东题词'革命烈士纪念塔'。是济南规模最大的烈士陵园。",
  280. "open_time": "全天开放",
  281. "ticket_info": "免费",
  282. "short_desc": "济南规模最大的革命烈士陵园",
  283. "tags": ["martyrs", "红色旅游"],
  284. "is_featured": True
  285. },
  286. {
  287. "name": "五三惨案纪念园",
  288. "category": "memorial",
  289. "location": "济南市趵突泉公园内",
  290. "description": "含'五三'纪念碑、纪念亭和蔡公时纪念馆,纪念1928年日军制造的'五三惨案'。",
  291. "history": "1928年5月3日日军杀害中国外交官蔡公时及军民6000余人,此遗址为惨案见证地。",
  292. "open_time": "8:00-18:00",
  293. "ticket_info": "含在趵突泉门票内(40元)",
  294. "short_desc": "纪念1928年'五三惨案'的遗址",
  295. "tags": ["memorial", "红色旅游"],
  296. "is_featured": True
  297. },
  298. {
  299. "name": "大峰山革命遗址",
  300. "category": "revolution",
  301. "location": "济南市长清区孝里镇",
  302. "description": "含中共长清县委旧址、八路军山东纵队第六支队成立旧址等革命遗迹群。",
  303. "history": "抗战时期长清县革命活动中心,被誉为'长清的小延安',现存石屋、地道等遗址。",
  304. "open_time": "8:30-17:00",
  305. "ticket_info": "联票50元",
  306. "short_desc": "抗战时期长清县革命活动中心遗址",
  307. "tags": ["revolution", "红色旅游"],
  308. "is_featured": True
  309. },
  310. {
  311. "name": "莱芜战役纪念馆",
  312. "category": "memorial",
  313. "location": "济南市莱芜区英雄北路",
  314. "description": "全景展示1947年莱芜战役的专题纪念馆,含展览馆、全景画馆和烈士纪念碑。",
  315. "history": "1947年2月华东野战军歼灭国民党军5.6万余人,创运动战典范。纪念馆1997年建成。",
  316. "open_time": "8:30-17:00",
  317. "ticket_info": "免费",
  318. "short_desc": "展示1947年莱芜战役的专题馆",
  319. "tags": ["memorial", "红色旅游"],
  320. "is_featured": True
  321. },
  322. {
  323. "name": "辛锐纪念馆",
  324. "category": "memorial",
  325. "location": "济南市章丘区刁镇",
  326. "description": "纪念革命烈士辛锐的专题馆,展示其书画作品、生平事迹及抗战文物。",
  327. "history": "辛锐(1918-1941)为著名革命艺术家,在沂蒙山区反扫荡中壮烈牺牲。2014年在其家乡建馆。",
  328. "open_time": "9:00-16:30",
  329. "ticket_info": "免费",
  330. "short_desc": "纪念革命艺术家辛锐的专题馆",
  331. "tags": ["memorial", "红色旅游"],
  332. "is_featured": True
  333. },
  334. {
  335. "name": "历城革命烈士陵园",
  336. "category": "martyrs",
  337. "location": "济南市历城区英雄山路",
  338. "description": "安葬历城战役等各时期烈士1276名,建有22米高革命烈士纪念碑。",
  339. "history": "始建于1955年,2014年改造升级,集中展现历城区革命斗争史。",
  340. "open_time": "8:00-17:00",
  341. "ticket_info": "免费",
  342. "short_desc": "安葬1276名革命烈士的陵园",
  343. "tags": ["martyrs", "红色旅游"],
  344. "is_featured": True
  345. },
  346. {
  347. "name": "济南市党史陈列馆",
  348. "category": "museum",
  349. "location": "济南市历下区经十路21028号",
  350. "description": "系统展示济南党组织1921年成立以来的发展历程,含珍贵党史档案500余件。",
  351. "history": "2011年建党90周年时建成开放,2021年完成展陈升级,包括'齐鲁曙光''浴血奋战'等六大展区。",
  352. "open_time": "周二至周六 9:00-11:30,13:30-17:00",
  353. "ticket_info": "凭身份证免费参观",
  354. "short_desc": "展示济南党组织发展历程的专题馆",
  355. "tags": ["museum", "红色旅游"],
  356. "is_featured": True
  357. },
  358. {
  359. "name": "泺口九烈士纪念碑",
  360. "category": "martyrs",
  361. "location": "济南市天桥区泺口街道黄河大坝南侧",
  362. "description": "纪念1933年8月被国民党杀害的9名中共山东地下党领导人,建有12米高纪念碑。",
  363. "history": "1933年山东省委遭破坏,李春亭、段亦民等9人在此英勇就义,1989年立碑纪念。",
  364. "open_time": "全天开放",
  365. "ticket_info": "免费",
  366. "short_desc": "纪念1933年牺牲的9名中共地下党领导人",
  367. "tags": ["martyrs", "红色旅游"],
  368. "is_featured": True
  369. },
  370. {
  371. "name": "平阴县委旧址纪念馆",
  372. "category": "revolution",
  373. "location": "济南市平阴县孔村镇",
  374. "description": "抗日战争时期平阴县委驻地,复原了县委办公室、地道等历史场景。",
  375. "history": "1939-1942年间中共平阴县委在此领导抗日斗争,现存石砌民居6间及抗战时期地道遗址。",
  376. "open_time": "8:30-17:00(周一闭馆)",
  377. "ticket_info": "团体预约制",
  378. "short_desc": "抗战时期平阴县委驻地旧址",
  379. "tags": ["revolution", "红色旅游"],
  380. "is_featured": True
  381. },
  382. {
  383. "name": "历城抗日纪念馆",
  384. "category": "memorial",
  385. "location": "济南市历城区西营镇",
  386. "description": "依托大南营战斗遗址建设,展示历城军民1937-1945年抗日斗争史实。",
  387. "history": "1944年八路军在此歼灭日军一个小队,现存战场遗址和22处抗战时期石刻标语。",
  388. "open_time": "9:00-16:30(冬季至16:00)",
  389. "ticket_info": "免费",
  390. "short_desc": "展示历城军民抗日斗争史的专题馆",
  391. "tags": ["memorial", "红色旅游"],
  392. "is_featured": True
  393. },
  394. {
  395. "name": "商河县革命烈士陵园",
  396. "category": "martyrs",
  397. "location": "济南市商河县青年路东首",
  398. "description": "安葬抗日战争、解放战争时期烈士863名,中央矗立19.49米高纪念碑。",
  399. "history": "始建于1955年,2015年改建,园内'商河革命历史展馆'详载本县重大战役史料。",
  400. "open_time": "8:00-18:00",
  401. "ticket_info": "免费",
  402. "short_desc": "安葬863名革命烈士的陵园",
  403. "tags": ["martyrs", "红色旅游"],
  404. "is_featured": True
  405. },
  406. {
  407. "name": "钢城区莱芜战役指挥所旧址",
  408. "category": "revolution",
  409. "location": "济南市钢城区辛庄镇石湾子村",
  410. "description": "陈毅、粟裕在此指挥莱芜战役的四合院旧址,保留作战地图等历史场景。",
  411. "history": "1947年2月华东野战军前线指挥所设此,现为省级文保单位,院内保留百年古梨树。",
  412. "open_time": "8:30-17:00",
  413. "ticket_info": "门票15元",
  414. "short_desc": "莱芜战役前线指挥所旧址",
  415. "tags": ["revolution", "红色旅游"],
  416. "is_featured": True
  417. },
  418. {
  419. "name": "济南乡师党史陈列室",
  420. "category": "education",
  421. "location": "济南市天桥区明湖西路",
  422. "description": "山东省立乡村师范学校旧址,山东党组织重要活动地,现存'红色乡师'专题展。",
  423. "history": "1932-1937年间该校培养200余名党员,赵健民、姚仲明等曾在此开展地下工作。",
  424. "open_time": "预约开放",
  425. "ticket_info": "免费",
  426. "short_desc": "山东党组织重要活动地旧址",
  427. "tags": ["education", "红色旅游"],
  428. "is_featured": True
  429. },
  430. {
  431. "name": "章丘第一支抗日武装纪念馆",
  432. "category": "memorial",
  433. "location": "济南市章丘区普集街道三山峪村",
  434. "description": "展示1937年成立的章丘人民抗日救国军斗争史,含武器、文件等实物展品。",
  435. "history": "1937年12月李曼村等在此建立章丘首支抗日武装,后编入八路军山东纵队。",
  436. "open_time": "9:00-16:30",
  437. "ticket_info": "免费",
  438. "short_desc": "展示章丘首支抗日武装斗争史的专题馆",
  439. "tags": ["memorial", "红色旅游"],
  440. "is_featured": True
  441. }
  442. ]
  443. created_count = 0
  444. skipped_count = 0
  445. image_added_count = 0
  446. for spot_data in red_spots_data:
  447. try:
  448. # 获取或创建城市
  449. city_name = get_city_name(spot_data['location'])
  450. city, _ = City.objects.get_or_create(
  451. name=city_name,
  452. defaults={
  453. 'code': city_name[:2].lower(),
  454. 'description': f"{city_name}红色旅游城市",
  455. 'is_hot': city_name in ['济南市', '青岛市', '烟台市']
  456. }
  457. )
  458. # 处理门票价格
  459. ticket_price = parse_ticket_price(spot_data['ticket_info'])
  460. # 创建或获取景点
  461. attraction, created = Attraction.objects.get_or_create(
  462. name=spot_data['name'],
  463. city=city,
  464. defaults={
  465. 'description': spot_data['description'],
  466. 'short_desc': spot_data['short_desc'],
  467. 'address': spot_data['location'],
  468. 'ticket_price': ticket_price,
  469. 'open_hours': spot_data['open_time'],
  470. 'tags': spot_data['tags'],
  471. 'history': spot_data['history'],
  472. 'is_featured': spot_data['is_featured']
  473. }
  474. )
  475. # 处理景点图片
  476. image_path = os.path.join(IMAGE_BASE_PATH, f"{spot_data['name']}.png")
  477. if os.path.exists(image_path):
  478. if not attraction.image: # 如果景点没有图片则添加
  479. with open(image_path, 'rb') as f:
  480. attraction.image.save(
  481. os.path.basename(image_path),
  482. File(f),
  483. save=True
  484. )
  485. image_added_count += 1
  486. self.stdout.write(f"成功添加图片: {spot_data['name']}")
  487. else:
  488. self.stdout.write(f"警告: 未找到图片 {image_path}")
  489. if created:
  490. created_count += 1
  491. self.stdout.write(f"创建景点: {spot_data['name']}")
  492. else:
  493. skipped_count += 1
  494. self.stdout.write(f"已存在景点: {spot_data['name']}")
  495. except Exception as e:
  496. self.stdout.write(self.style.ERROR(
  497. f"处理景点 {spot_data['name']} 时出错: {str(e)}. 位置信息: {spot_data['location']}"
  498. ))
  499. continue
  500. self.stdout.write(
  501. self.style.SUCCESS(
  502. f'导入完成!成功创建 {created_count} 个景点,跳过 {skipped_count} 个已存在景点,添加 {image_added_count} 张图片'
  503. )
  504. )