Browse Source
feat(transmitters): add Madhhab model, relational field, and admin endpoints
feat(transmitters): add Madhhab model, relational field, and admin endpoints
- Introduce Madhhab model with multilingual title, description, and slug - Link madhhabs relation (ManyToMany) to Transmitters - Add migration 0062 to create table and populate from existing madhab JSON data - Register DovodiMadhhabViewSet and admin routes in urls.py - Update RELATIONAL_MIGRATION_ROADMAP.md for madhhab migrationmaster
6 changed files with 264 additions and 27 deletions
-
49RELATIONAL_MIGRATION_ROADMAP.md
-
112apps/hadis/migrations/0062_madhhab_and_relations.py
-
47apps/hadis/models/transmitter.py
-
58apps/hadis/serializers/serializers_admin.py
-
5apps/hadis/urls.py
-
20apps/hadis/views_admin.py
@ -0,0 +1,112 @@ |
|||
# Generated by Django 4.2.30 on 2026-10-20 15:23 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
MADHHAB_DATA = [ |
|||
{ |
|||
"slug": "shia", |
|||
"title": [ |
|||
{"language_code": "ar", "text": "شيعي", "title": "شيعي"}, |
|||
{"language_code": "fa", "text": "شیعه", "title": "شیعه"}, |
|||
{"language_code": "en", "text": "Shia", "title": "Shia"}, |
|||
{"language_code": "ru", "text": "Шиит", "title": "Шиит"}, |
|||
], |
|||
}, |
|||
{ |
|||
"slug": "sunni", |
|||
"title": [ |
|||
{"language_code": "ar", "text": "سني", "title": "سني"}, |
|||
{"language_code": "fa", "text": "سنی", "title": "سنی"}, |
|||
{"language_code": "en", "text": "Sunni", "title": "Sunni"}, |
|||
{"language_code": "ru", "text": "Суннит", "title": "Суннит"}, |
|||
], |
|||
}, |
|||
{ |
|||
"slug": "zaydi", |
|||
"title": [ |
|||
{"language_code": "ar", "text": "زيدي", "title": "زيدي"}, |
|||
{"language_code": "fa", "text": "زیدی", "title": "زیدی"}, |
|||
{"language_code": "en", "text": "Zaydi", "title": "Zaydi"}, |
|||
{"language_code": "ru", "text": "Зейдит", "title": "Зейдит"}, |
|||
], |
|||
}, |
|||
{ |
|||
"slug": "waqifi", |
|||
"title": [ |
|||
{"language_code": "ar", "text": "واقفي", "title": "واقفي"}, |
|||
{"language_code": "fa", "text": "واقفی", "title": "واقفی"}, |
|||
{"language_code": "en", "text": "Waqifi", "title": "Waqifi"}, |
|||
{"language_code": "ru", "text": "Вакифит", "title": "Вакифит"}, |
|||
], |
|||
}, |
|||
{ |
|||
"slug": "fathi", |
|||
"title": [ |
|||
{"language_code": "ar", "text": "فطحي", "title": "فطحي"}, |
|||
{"language_code": "fa", "text": "فطحی", "title": "فطحی"}, |
|||
{"language_code": "en", "text": "Fathi", "title": "Fathi"}, |
|||
{"language_code": "ru", "text": "Фатхит", "title": "Фатхиت"}, |
|||
], |
|||
}, |
|||
] |
|||
|
|||
|
|||
def seed_and_migrate_madhhabs(apps, schema_editor): |
|||
Madhhab = apps.get_model('hadis', 'Madhhab') |
|||
Transmitters = apps.get_model('hadis', 'Transmitters') |
|||
|
|||
madhhab_map = {} |
|||
for item in MADHHAB_DATA: |
|||
obj, _ = Madhhab.objects.get_or_create( |
|||
slug=item["slug"], |
|||
defaults={"title": item["title"]}, |
|||
) |
|||
madhhab_map[item["slug"]] = obj |
|||
|
|||
shia_obj = madhhab_map.get("shia") |
|||
sunni_obj = madhhab_map.get("sunni") |
|||
|
|||
if shia_obj: |
|||
for t in Transmitters.objects.filter(madhhab='shia'): |
|||
t.madhhabs.add(shia_obj) |
|||
|
|||
if sunni_obj: |
|||
for t in Transmitters.objects.filter(madhhab='sunni'): |
|||
t.madhhabs.add(sunni_obj) |
|||
|
|||
|
|||
def reverse_seed(apps, schema_editor): |
|||
pass |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('hadis', '0061_sahabi_status_and_relation'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='Madhhab', |
|||
fields=[ |
|||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('title', models.JSONField(default=list, verbose_name='Title')), |
|||
('slug', models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug')), |
|||
('description', models.JSONField(blank=True, default=list, verbose_name='Description')), |
|||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), |
|||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), |
|||
], |
|||
options={ |
|||
'verbose_name': 'Madhhab', |
|||
'verbose_name_plural': 'Madhhabs', |
|||
'ordering': ['slug', 'id'], |
|||
}, |
|||
), |
|||
migrations.AddField( |
|||
model_name='transmitters', |
|||
name='madhhabs', |
|||
field=models.ManyToManyField(blank=True, related_name='transmitters', to='hadis.madhhab', verbose_name='Madhhabs (M2M)'), |
|||
), |
|||
migrations.RunPython(seed_and_migrate_madhhabs, reverse_seed), |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue