Browse Source

OpinionStatus model made and replaced with normal status field

master
Mohsen Taba 5 months ago
parent
commit
f15a7ff574
  1. 53
      apps/hadis/migrations/0075_opinionstatus.py
  2. 25
      apps/hadis/migrations/0076_alter_transmitteropinion_status.py
  3. 26
      apps/hadis/migrations/0077_alter_transmitteropinion_status.py
  4. 25
      apps/hadis/migrations/0078_alter_transmitteropinion_status.py
  5. 16
      apps/hadis/migrations/0079_remove_transmitteropinion_status.py
  6. 25
      apps/hadis/migrations/0080_transmitteropinion_status.py
  7. 69
      apps/hadis/models/transmitter.py

53
apps/hadis/migrations/0075_opinionstatus.py

@ -0,0 +1,53 @@
# Generated by Django 4.2.27 on 2025-12-23 13:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("hadis", "0074_alter_hadisstatus_slug"),
]
operations = [
migrations.CreateModel(
name="OpinionStatus",
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(
blank=True, max_length=255, null=True, verbose_name="slug"
),
),
(
"color",
models.CharField(
choices=[
("red", "Red"),
("green", "Green"),
("blue", "Blue"),
("yellow", "Yellow"),
("orange", "Orange"),
("purple", "Purple"),
("gray", "Gray"),
],
max_length=20,
verbose_name="color",
),
),
],
options={
"verbose_name": "transmitter reliability",
"verbose_name_plural": "transmitter reliability",
},
),
]

25
apps/hadis/migrations/0076_alter_transmitteropinion_status.py

@ -0,0 +1,25 @@
# Generated by Django 4.2.27 on 2025-12-23 13:57
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("hadis", "0075_opinionstatus"),
]
operations = [
migrations.AlterField(
model_name="transmitteropinion",
name="status",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="opinions",
to="hadis.opinionstatus",
verbose_name="opinion status",
),
),
]

26
apps/hadis/migrations/0077_alter_transmitteropinion_status.py

@ -0,0 +1,26 @@
# Generated by Django 4.2.27 on 2025-12-23 14:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("hadis", "0076_alter_transmitteropinion_status"),
]
operations = [
migrations.AlterField(
model_name="transmitteropinion",
name="status",
field=models.ForeignKey(
blank=True,
default=1,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="opinions",
to="hadis.opinionstatus",
verbose_name="opinion status",
),
),
]

25
apps/hadis/migrations/0078_alter_transmitteropinion_status.py

@ -0,0 +1,25 @@
# Generated by Django 4.2.27 on 2025-12-23 14:03
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("hadis", "0077_alter_transmitteropinion_status"),
]
operations = [
migrations.AlterField(
model_name="transmitteropinion",
name="status",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="opinions",
to="hadis.opinionstatus",
verbose_name="opinion status",
),
),
]

16
apps/hadis/migrations/0079_remove_transmitteropinion_status.py

@ -0,0 +1,16 @@
# Generated by Django 4.2.27 on 2025-12-23 14:08
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("hadis", "0078_alter_transmitteropinion_status"),
]
operations = [
migrations.RemoveField(
model_name="transmitteropinion",
name="status",
),
]

25
apps/hadis/migrations/0080_transmitteropinion_status.py

@ -0,0 +1,25 @@
# Generated by Django 4.2.27 on 2025-12-23 14:09
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("hadis", "0079_remove_transmitteropinion_status"),
]
operations = [
migrations.AddField(
model_name="transmitteropinion",
name="status",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="opinions",
to="hadis.opinionstatus",
verbose_name="opinion status",
),
),
]

69
apps/hadis/models/transmitter.py

@ -325,15 +325,61 @@ class HadisTransmitter(models.Model):
layer_info = f" - {self.narrator_layer}" if self.narrator_layer else ""
return f'{self.hadis.number} - {self.transmitter.full_name} ({self.order}){layer_info}'
class OpinionStatus(models.Model):
class ColorChoices(models.TextChoices):
RED = 'red', _('Red')
GREEN = 'green', _('Green')
BLUE = 'blue', _('Blue')
YELLOW = 'yellow', _('Yellow')
ORANGE = 'orange', _('Orange')
PURPLE = 'purple', _('Purple')
GRAY = 'gray', _('Gray')
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True)
color = models.CharField(max_length=20, choices=ColorChoices.choices, verbose_name=_('color'))
def save(self, *args, **kwargs):
if not self.slug:
slug = slugify(self.name[0]['text'])
self.slug = slug
super().save(*args, **kwargs)
def __str__(self):
return self.title[0]['text']
def get_title(self,lang):
"""
Get title for a specific language
"""
if not self.title or not isinstance(self.title, list):
return None
for tr in self.title:
if isinstance(tr, dict) and tr.get('language_code') == lang:
return tr.get('text', '')
for tr in self.title:
if isinstance(tr, dict) and tr.get('language_code') == 'en':
return tr.get('text', '')
return None
class Meta:
verbose_name = _('transmitter reliability')
verbose_name_plural = _('transmitter reliability')
class TransmitterOpinion(models.Model):
"""
Model for scholarly opinions about transmitters
"""
class OpinionStatus(models.TextChoices):
CONFIRMED = 'confirmed', _('Confirmed')
MIXED = 'mixed', _('Mixed')
REJECTED = 'rejected', _('Rejected')
# class OpinionStatus(models.TextChoices):
# CONFIRMED = 'confirmed', _('Confirmed')
# MIXED = 'mixed', _('Mixed')
# REJECTED = 'rejected', _('Rejected')
transmitter = models.ForeignKey(
Transmitters,
@ -343,14 +389,15 @@ class TransmitterOpinion(models.Model):
)
scholar_name = models.JSONField(default = list , verbose_name=_('Scholar Name'))
opinion_text = models.JSONField(default = list , verbose_name=_('Opinion Text'))
status = models.CharField(
max_length=20,
choices=OpinionStatus.choices,
default=OpinionStatus.CONFIRMED,
verbose_name=_('Opinion Status'),
help_text=_('Status of the opinion')
status = models.ForeignKey(
OpinionStatus,
on_delete=models.CASCADE,
verbose_name=_('opinion status'),
related_name='opinions',
# default=1,
blank = True,
null=True
)
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

Loading…
Cancel
Save