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