Browse Source
Add management commands for seeding calendar occasions
Add management commands for seeding calendar occasions
- Introduced `seed_occasions.py` management command to populate the database with a comprehensive list of Persian, International, and Religious calendar occasions. - Created `__init__.py` files in the management and commands directories to ensure proper package structure. - Enhanced the seeding process with transaction management for data integrity during the creation of occasions.master
3 changed files with 143 additions and 0 deletions
-
0apps/dobodbi_calendar/management/__init__.py
-
0apps/dobodbi_calendar/management/commands/__init__.py
-
143apps/dobodbi_calendar/management/commands/seed_occasions.py
@ -0,0 +1,143 @@ |
|||||
|
import json |
||||
|
from django.core.management.base import BaseCommand |
||||
|
from django.db import transaction |
||||
|
from apps.dobodbi_calendar.models import CalendarOccasions |
||||
|
|
||||
|
class Command(BaseCommand): |
||||
|
help = 'Seeds the database with realistic Persian, International, and Religious calendar occasions.' |
||||
|
|
||||
|
def handle(self, *args, **options): |
||||
|
self.stdout.write(self.style.WARNING('Starting to seed calendar occasions...')) |
||||
|
|
||||
|
# Data structure: (Title, Type, Event Type, Month, Day) |
||||
|
# Note: For 'georgian', we use the fixed Gregorian equivalents of Persian Solar events |
||||
|
# e.g., Nowruz (1 Farvardin) = 21 March |
||||
|
|
||||
|
occasions_data = [ |
||||
|
# --- JANUARY (Dey/Bahman) --- |
||||
|
("آغاز سال میلادی", "georgian", "international", "01", "01"), |
||||
|
("شهادت امیرکبیر", "georgian", "national", "01", "10"), # 20 Dey |
||||
|
("روز گفتگوی تمدنها", "georgian", "international", "01", "14"), |
||||
|
("روز هوای پاک", "georgian", "national", "01", "19"), # 29 Dey |
||||
|
|
||||
|
# --- FEBRUARY (Bahman/Esfand) --- |
||||
|
("بازگشت امام خمینی به ایران", "georgian", "national", "02", "01"), # 12 Bahman |
||||
|
("روز نیروی هوایی", "georgian", "national", "02", "08"), # 19 Bahman |
||||
|
("پیروزی انقلاب اسلامی", "georgian", "national", "02", "11"), # 22 Bahman |
||||
|
("ولنتاین (روز عشق)", "georgian", "international", "02", "14"), |
||||
|
("روز مهندس (بزرگداشت خواجه نصیر)", "georgian", "national", "02", "24"), # 5 Esfand |
||||
|
("سپندارمذگان (روز عشق ایرانی)", "georgian", "national", "02", "24"), # 5 Esfand |
||||
|
|
||||
|
# --- MARCH (Esfand/Farvardin) --- |
||||
|
("روز درختکاری", "georgian", "national", "03", "05"), # 15 Esfand |
||||
|
("روز جهانی زن", "georgian", "international", "03", "08"), |
||||
|
("روز ملی شدن صنعت نفت", "georgian", "national", "03", "20"), # 29 Esfand |
||||
|
("عید نوروز (آغاز سال نو)", "georgian", "national", "03", "21"), # 1 Farvardin |
||||
|
("عید دیدنی (تعطیلات نوروز)", "georgian", "national", "03", "22"), # 2 Farvardin |
||||
|
|
||||
|
# --- APRIL (Farvardin/Ordibehesht) --- |
||||
|
("روز طبیعت (سیزده بدر)", "georgian", "national", "04", "02"), # 13 Farvardin |
||||
|
("روز جهانی بهداشت", "georgian", "international", "04", "07"), |
||||
|
("روز بزرگداشت عطار نیشابوری", "georgian", "national", "04", "14"), # 25 Farvardin |
||||
|
("روز بزرگداشت سعدی", "georgian", "national", "04", "21"), # 1 Ordibehesht |
||||
|
("روز ملی خلیج فارس", "georgian", "national", "04", "30"), # 10 Ordibehesht |
||||
|
|
||||
|
# --- MAY (Ordibehesht/Khordad) --- |
||||
|
("روز جهانی کار و کارگر", "georgian", "international", "05", "01"), |
||||
|
("شهادت استاد مطهری (روز معلم)", "georgian", "national", "05", "02"), # 12 Ordibehesht |
||||
|
("روز بزرگداشت فردوسی", "georgian", "national", "05", "15"), # 25 Ordibehesht |
||||
|
("روز بزرگداشت خیام", "georgian", "national", "05", "18"), # 28 Ordibehesht |
||||
|
|
||||
|
# --- JUNE (Khordad/Tir) --- |
||||
|
("رحلت امام خمینی", "georgian", "national", "06", "04"), # 14 Khordad |
||||
|
("قیام ۱۵ خرداد", "georgian", "national", "06", "05"), # 15 Khordad |
||||
|
("روز جهانی محیط زیست", "georgian", "international", "06", "05"), |
||||
|
("روز صنایع دستی", "georgian", "national", "06", "10"), # 20 Khordad |
||||
|
|
||||
|
# --- JULY (Tir/Mordad) --- |
||||
|
("روز قلم", "georgian", "national", "07", "05"), # 14 Tir |
||||
|
("جشن تیرگان", "georgian", "national", "07", "04"), # 13 Tir |
||||
|
("روز بهزیستی و تامین اجتماعی", "georgian", "national", "07", "16"), # 25 Tir |
||||
|
|
||||
|
# --- AUGUST (Mordad/Shahrivar) --- |
||||
|
("روز خبرنگار", "georgian", "national", "08", "08"), # 17 Mordad |
||||
|
("روز جهانی چپدستها", "georgian", "international", "08", "13"), |
||||
|
("روز عکاسی", "georgian", "international", "08", "19"), |
||||
|
("روز بزرگداشت ابن سینا (روز پزشک)", "georgian", "national", "08", "23"), # 1 Shahrivar |
||||
|
|
||||
|
# --- SEPTEMBER (Shahrivar/Mehr) --- |
||||
|
("روز داروسازی (زکریای رازی)", "georgian", "national", "09", "27"), # 5 Shahrivar (Late Aug/Early Sep) |
||||
|
("روز ملی سینما", "georgian", "national", "09", "12"), # 21 Shahrivar |
||||
|
("روز شعر و ادب فارسی (شهریار)", "georgian", "national", "09", "18"), # 27 Shahrivar |
||||
|
("روز جهانی صلح", "georgian", "international", "09", "21"), |
||||
|
("روز آتشنشانی و ایمنی", "georgian", "national", "09", "29"), # 7 Mehr |
||||
|
|
||||
|
# --- OCTOBER (Mehr/Aban) --- |
||||
|
("روز جهانی کودک", "georgian", "international", "10", "08"), |
||||
|
("روز بزرگداشت حافظ", "georgian", "national", "10", "12"), # 20 Mehr |
||||
|
("روز جهانی استاندارد", "georgian", "international", "10", "14"), |
||||
|
("روز آمار و برنامهریزی", "georgian", "national", "10", "23"), # 1 Aban |
||||
|
|
||||
|
# --- NOVEMBER (Aban/Azar) --- |
||||
|
("روز دانشآموز (۱۳ آبان)", "georgian", "national", "11", "04"), # 13 Aban |
||||
|
("روز کتاب و کتابخوانی", "georgian", "national", "11", "15"), # 24 Aban |
||||
|
("روز جهانی تلویزیون", "georgian", "international", "11", "21"), |
||||
|
("روز نیروی دریایی", "georgian", "national", "11", "28"), # 7 Azar |
||||
|
|
||||
|
# --- DECEMBER (Azar/Dey) --- |
||||
|
("روز دانشجو (۱۶ آذر)", "georgian", "national", "12", "07"), # 16 Azar |
||||
|
("روز پژوهش", "georgian", "national", "12", "16"), # 25 Azar |
||||
|
("شب یلدا (طولانیترین شب سال)", "georgian", "national", "12", "21"), # 30 Azar |
||||
|
("میلاد حضرت مسیح (ع)", "georgian", "religious", "12", "25"), |
||||
|
|
||||
|
# --- LUNAR EVENTS (Religious) --- |
||||
|
# Using standard Lunar Hijri months: |
||||
|
# 01: Muharram, 02: Safar, 03: Rabi-al-Awwal, etc. |
||||
|
("تاسوعای حسینی", "lunar", "religious", "01", "09"), |
||||
|
("عاشورای حسینی", "lunar", "religious", "01", "10"), |
||||
|
("اربعین حسینی", "lunar", "religious", "02", "20"), |
||||
|
("رحلت پیامبر اکرم (ص)", "lunar", "religious", "02", "28"), |
||||
|
("میلاد پیامبر اکرم (ص)", "lunar", "religious", "03", "17"), |
||||
|
("ولادت حضرت علی (ع) - روز پدر", "lunar", "religious", "07", "13"), |
||||
|
("مبعث پیامبر اکرم (ص)", "lunar", "religious", "07", "27"), |
||||
|
("ولادت حضرت قائم (عج)", "lunar", "religious", "08", "15"), |
||||
|
("شهادت حضرت علی (ع)", "lunar", "religious", "09", "21"), |
||||
|
("عید سعید فطر", "lunar", "religious", "10", "01"), |
||||
|
("شهادت امام جعفر صادق (ع)", "lunar", "religious", "10", "25"), |
||||
|
("عید سعید قربان", "lunar", "religious", "12", "10"), |
||||
|
("عید سعید غدیر خم", "lunar", "religious", "12", "18"), |
||||
|
] |
||||
|
|
||||
|
created_count = 0 |
||||
|
updated_count = 0 |
||||
|
|
||||
|
with transaction.atomic(): |
||||
|
for title, type_val, event_type, month, day in occasions_data: |
||||
|
# Prepare the dates field json structure |
||||
|
date_json = [ |
||||
|
{ |
||||
|
"day": day, |
||||
|
"month": month, |
||||
|
"year": "" # Empty for yearly events |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
obj, created = CalendarOccasions.objects.update_or_create( |
||||
|
title=title, |
||||
|
defaults={ |
||||
|
"occasion_type": type_val, |
||||
|
"event_type": event_type, |
||||
|
"dates": date_json, |
||||
|
"is_yearly": True, |
||||
|
"is_global": True |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
if created: |
||||
|
created_count += 1 |
||||
|
else: |
||||
|
updated_count += 1 |
||||
|
|
||||
|
self.stdout.write(self.style.SUCCESS(f'Successfully seeded events.')) |
||||
|
self.stdout.write(self.style.SUCCESS(f'Created: {created_count}')) |
||||
|
self.stdout.write(self.style.SUCCESS(f'Updated: {updated_count}')) |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue