Browse Source

utf-8 slug usage updated

master
Mohsen Taba 1 day ago
parent
commit
370e778ca0
  1. 18
      apps/article/migrations/0004_alter_articlecollection_slug.py
  2. 2
      apps/article/models.py
  3. 78
      apps/hadis/migrations/0032_alter_bookauthor_slug_alter_bookreference_slug_and_more.py
  4. 10
      apps/hadis/models/hadis.py
  5. 6
      apps/hadis/models/reference.py
  6. 10
      apps/hadis/models/transmitter.py
  7. 33
      apps/library/migrations/0008_alter_author_slug_alter_book_slug_and_more.py
  8. 8
      apps/library/models.py
  9. 18
      apps/podcast/migrations/0004_alter_podcastcollection_slug.py
  10. 2
      apps/podcast/models.py
  11. 18
      apps/video/migrations/0004_alter_videocollection_slug.py
  12. 2
      apps/video/models.py

18
apps/article/migrations/0004_alter_articlecollection_slug.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.30 on 2026-07-20 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('article', '0003_remove_articlecollection_pin_top'),
]
operations = [
migrations.AlterField(
model_name='articlecollection',
name='slug',
field=models.SlugField(allow_unicode=True, max_length=255, unique=True),
),
]

2
apps/article/models.py

@ -30,7 +30,7 @@ class ArticleCollection(LowercaseSlugMixin, models.Model):
MIDDLE = 'middle', _('Middle Section')
title = models.CharField(max_length=255, help_text="This title will not be displayed anywhere")
slug = models.SlugField(max_length=255, unique=True)
slug = models.SlugField(max_length=255, unique=True, allow_unicode=True)
summary = models.CharField(max_length=512, null=True, blank=True, help_text=_('could be null'))
thumbnail = models.ImageField(upload_to='article/collection/', null=True, blank=True, help_text=_('image allowed'))
order = models.IntegerField(default=0, verbose_name=_('order'))

78
apps/hadis/migrations/0032_alter_bookauthor_slug_alter_bookreference_slug_and_more.py

@ -0,0 +1,78 @@
# Generated by Django 4.2.30 on 2026-07-20 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hadis', '0031_remove_hadiscollection_pin_top_and_more'),
]
operations = [
migrations.AlterField(
model_name='bookauthor',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='bookreference',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='bookresearcher',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='hadis',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='hadiscollection',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='hadiscorrection',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='hadisinterpretation',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, verbose_name='slug'),
),
migrations.AlterField(
model_name='hadisstatus',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='narratorlayer',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='opinionstatus',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='transmitteroriginaltext',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='transmitterreliability',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, verbose_name='slug'),
),
migrations.AlterField(
model_name='transmitters',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, unique=True, verbose_name='slug'),
),
]

10
apps/hadis/models/hadis.py

@ -16,7 +16,7 @@ class HadisCollection(LowercaseSlugMixin, models.Model):
slug_source_field = 'title'
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, unique=True, verbose_name=_('slug'), blank=True)
slug = models.SlugField(max_length=255, unique=True, verbose_name=_('slug'), blank=True, allow_unicode=True)
summary = models.JSONField(default = list , verbose_name=_('Summary'))
status = models.BooleanField(default=True, verbose_name=_('status'))
display_position = models.CharField(
@ -120,7 +120,7 @@ class HadisStatus(ColorPaletteMixin, LowercaseSlugMixin, models.Model):
slug_source_field = 'title'
title = models.JSONField(default = list , verbose_name=_('Title'))
slug= models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique = True)
slug= models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique = True, allow_unicode=True)
# color = models.CharField(max_length=20, choices=ColorChoices.choices, verbose_name=_('color'))
order = models.IntegerField(default=0, verbose_name=_('order'))
description = models.JSONField(default = list , verbose_name=_('Description'))
@ -158,7 +158,7 @@ class Hadis(LowercaseSlugMixin, models.Model):
category = models.ForeignKey("hadis.HadisCategory", on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_('category'))
number = models.PositiveIntegerField(verbose_name=_('number'), default=1)
legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True, allow_unicode=True)
title_narrator = models.JSONField(default = list , verbose_name=_('Title Narrator'))
title = models.JSONField(default = list , verbose_name=_('Title'))
description = models.JSONField(default = list , verbose_name=_('Description'))
@ -388,7 +388,7 @@ class ReferenceImage(models.Model):
class HadisCorrection(models.Model):
hadis = models.ForeignKey(Hadis, verbose_name=_("hadis correction"), on_delete=models.CASCADE)
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True, allow_unicode=True)
legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True)
narrator = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Narrator'))
links = models.JSONField(verbose_name=_('links'), null=True, blank=True, default=dict)
@ -447,7 +447,7 @@ class HadisCorrection(models.Model):
class HadisInterpretation(models.Model):
category = models.ForeignKey('HadisCategory', on_delete=models.CASCADE, related_name='interpretations', verbose_name=_('Category'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True, db_index=True) # 👈 فیلد جدید
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True, db_index=True, allow_unicode=True) # 👈 فیلد جدید
legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True)
narrator = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Narrator'))
links = models.JSONField(verbose_name=_('links'), null=True, blank=True, default=dict)

6
apps/hadis/models/reference.py

@ -95,7 +95,7 @@ class BookReference(LowercaseSlugMixin, models.Model):
description = models.JSONField(default = list , verbose_name=_('Description'))
language = models.JSONField(default = list , verbose_name=_('Language'))
number_page = models.PositiveIntegerField(verbose_name=_('number of pages'), blank=True, null=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True, allow_unicode=True)
subject_area = models.ManyToManyField(
'BookSubjectArea',
verbose_name=_('Subject Area'),
@ -329,7 +329,7 @@ class BookAuthor(LowercaseSlugMixin, models.Model):
Model for book reference authors
"""
name = models.JSONField(default=list, verbose_name=_('Name'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), null=True, blank=True, unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), null=True, blank=True, unique=True, allow_unicode=True)
related_narrator = models.OneToOneField(
'hadis.Transmitters',
@ -466,7 +466,7 @@ class BookResearcher(LowercaseSlugMixin, models.Model):
verbose_name=_('Author')
)
name = models.JSONField(default=list, blank=True, verbose_name=_('Name'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), null=True, blank=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), null=True, blank=True, allow_unicode=True)
class Meta:
verbose_name = _('Book Researcher')

10
apps/hadis/models/transmitter.py

@ -20,7 +20,7 @@ class NarratorLayer(LowercaseSlugMixin, models.Model):
name = models.JSONField(default = list , verbose_name=_('Name'))
number = models.PositiveIntegerField(verbose_name=_('layer number'), unique=True)
description = models.JSONField(default = list , verbose_name=_('Description'))
slug = models.SlugField(max_length=255,unique=True, verbose_name=_('slug'), blank=True)
slug = models.SlugField(max_length=255,unique=True, verbose_name=_('slug'), blank=True, allow_unicode=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))
@ -127,7 +127,7 @@ class TransmitterReliability(ColorPaletteMixin, LowercaseSlugMixin, models.Model
slug_source_field = 'title'
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True, allow_unicode=True)
@ -183,7 +183,7 @@ class Transmitters(LowercaseSlugMixin, models.Model):
kunya = models.JSONField(default = list , verbose_name=_('Kunya'))
known_as = models.JSONField(default = list , verbose_name=_('Known as'))
nickname = models.JSONField(default = list , verbose_name=_('Nick Name'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True, allow_unicode=True)
legacy_number = models.PositiveIntegerField(unique=True, null=True, blank=True, db_index=True)
legacy_id = models.CharField(max_length=255, unique=True, null=True, blank=True, db_index=True)
relatives_raw = models.JSONField(default=dict, blank=True, verbose_name=_('Raw Relatives Data'))
@ -389,7 +389,7 @@ class OpinionStatus(ColorPaletteMixin, LowercaseSlugMixin, models.Model):
slug_source_field = 'title'
title = models.JSONField(default = list , verbose_name=_('Title'))
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,null=True, allow_unicode=True)
@ -510,7 +510,7 @@ class TransmitterOriginalText(models.Model):
verbose_name=_('transmitter'),
related_name='originaltexts'
)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True)
slug = models.SlugField(max_length=255, verbose_name=_('slug'), blank=True,unique=True, allow_unicode=True)
title = models.JSONField(default = list , verbose_name=_('Title'))
text = models.JSONField(default = list , verbose_name=_('Text'))
translation = models.JSONField(verbose_name=_('translation'), default=list)

33
apps/library/migrations/0008_alter_author_slug_alter_book_slug_and_more.py

@ -0,0 +1,33 @@
# Generated by Django 4.2.30 on 2026-07-20 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('library', '0007_remove_bookcollection_pin_top_and_more'),
]
operations = [
migrations.AlterField(
model_name='author',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True),
),
migrations.AlterField(
model_name='book',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True),
),
migrations.AlterField(
model_name='bookcollection',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True),
),
migrations.AlterField(
model_name='category',
name='slug',
field=models.SlugField(allow_unicode=True, blank=True, max_length=255, null=True, unique=True),
),
]

8
apps/library/models.py

@ -18,7 +18,7 @@ class BookCollection(LowercaseSlugMixin, models.Model):
# BOTTOM = 'bottom', _('Bottom Section')
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True, allow_unicode=True)
summary = models.CharField(max_length=512, null=True, blank=True, help_text=_('could be null'))
display_position = models.CharField(
max_length=20,
@ -65,7 +65,7 @@ class MiddleBookCollection(BookCollection):
class Category(LowercaseSlugMixin, models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True, allow_unicode=True)
status = models.BooleanField(default=True, verbose_name=_('status'))
# books = models.ManyToManyField('library.Book', related_name='related_categories_books',through="library.Book_categories" ,verbose_name=_('Books'), blank=True)
@ -88,7 +88,7 @@ class Category(LowercaseSlugMixin, models.Model):
class Author(LowercaseSlugMixin, models.Model):
slug_source_field = 'full_name'
full_name = models.CharField(max_length=255, verbose_name=_('Full Name'))
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True, allow_unicode=True)
thumbnail = models.ImageField(
upload_to='author_thumbnails/',
null=True,
@ -140,7 +140,7 @@ class Book(LowercaseSlugMixin, models.Model):
docx = 'docx', 'Docx'
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True, allow_unicode=True)
slogan = models.CharField(max_length=300, blank=True, null=True)
summary_title = models.CharField(max_length=512, null=True, blank=True, help_text=_('Summary Title'))

18
apps/podcast/migrations/0004_alter_podcastcollection_slug.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.30 on 2026-07-20 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('podcast', '0003_remove_podcastcollection_pin_top'),
]
operations = [
migrations.AlterField(
model_name='podcastcollection',
name='slug',
field=models.SlugField(allow_unicode=True, max_length=255, unique=True),
),
]

2
apps/podcast/models.py

@ -31,7 +31,7 @@ class PodcastCollection(LowercaseSlugMixin, models.Model):
MIDDLE = 'middle', _('Middle Section')
title = models.CharField(max_length=255, help_text="This title will not be displayed anywhere")
slug = models.SlugField(max_length=255, unique=True)
slug = models.SlugField(max_length=255, unique=True, allow_unicode=True)
summary = models.CharField(max_length=512, null=True, blank=True, help_text=_('could be null'))
thumbnail = models.ImageField(upload_to='podcast/collection/', null=True, blank=True, help_text=_('image allowed'))
order = models.IntegerField(default=0, verbose_name=_('order'))

18
apps/video/migrations/0004_alter_videocollection_slug.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.30 on 2026-07-20 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('video', '0003_remove_videocollection_pin_top'),
]
operations = [
migrations.AlterField(
model_name='videocollection',
name='slug',
field=models.SlugField(allow_unicode=True, max_length=255, unique=True),
),
]

2
apps/video/models.py

@ -33,7 +33,7 @@ class VideoCollection(LowercaseSlugMixin, models.Model):
MIDDLE = 'middle', _('Middle Section')
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True)
slug = models.SlugField(max_length=255, unique=True, allow_unicode=True)
summary = models.CharField(max_length=512, null=True, blank=True, help_text=_('could be null'))
thumbnail = models.ImageField(upload_to='video/collection/', null=True, blank=True, help_text=_('image allowed'))
order = models.IntegerField(default=0, verbose_name=_('order'))

Loading…
Cancel
Save