from django.db import models from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from mptt.models import MPTTModel, TreeForeignKey class HadisSect(models.Model): class SectType(models.TextChoices): SHIA = 'shia', _('Shia') SUNNI = 'sunni', _('Sunni') sect_type = models.CharField(max_length=10, choices=SectType.choices, unique=True, verbose_name=_('Sect Name')) title = models.CharField(max_length=256, verbose_name=_('Name')) is_active = models.BooleanField(default=True, verbose_name=_('Is Active')) order = models.IntegerField(default=0, verbose_name=_('order')) def __str__(self): return f"{self.sect_type}: {self.title}" class Meta: verbose_name = _('Hadis Sect') verbose_name_plural = _('Hadis Sects') ordering = ('order',) class HadisCategory(MPTTModel): class SourceType(models.TextChoices): QURAN = 'quran', _('Quran') HADITH = 'hadith', _('Hadith') parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children') sect = models.ForeignKey(HadisSect, on_delete=models.PROTECT, verbose_name=_('Sect'), null=False, blank=False) source_type = models.CharField(max_length=10, choices=SourceType.choices, verbose_name=_('Source Type')) title = models.CharField(max_length=256, verbose_name=_('Title')) order = models.IntegerField(default=0, verbose_name=_('order')) xmind_file = models.FileField(upload_to='hadis/xmind_files/', verbose_name=_('xmind file'), null=True, blank=True) slug = None content_type = None language = None language_id = None class Meta: verbose_name = _('Hadis Category') verbose_name_plural = _('Hadis Categories') ordering = ('order',) def __str__(self): return f"{self.sect.sect_type}: {self.source_type} - {self.title}"