Browse Source
translate enhancement
translate enhancement
update models and admin files which had missing lazy text features update the translation file.master
15 changed files with 1022 additions and 357 deletions
-
1apps/account/admin/location.py
-
26apps/account/admin/notification.py
-
13apps/account/admin/professor.py
-
11apps/account/admin/student.py
-
12apps/account/admin/user.py
-
127apps/account/migrations/0003_alter_clientuser_options_and_more.py
-
191apps/account/models/groups.py
-
11apps/account/models/notification.py
-
95apps/account/models/user.py
-
36apps/certificate/migrations/0002_alter_certificate_course_and_more.py
-
8apps/certificate/models.py
-
15apps/course/admin/live_session.py
-
31apps/course/migrations/0006_alter_course_professor_alter_course_video_file_and_more.py
-
8apps/course/models/course.py
-
794locale/ru/LC_MESSAGES/django.po
@ -1,12 +1,14 @@ |
|||||
from ajaxdatatable.admin import AjaxDatatable |
|
||||
|
|
||||
from apps.account.models import User, Notification |
|
||||
|
|
||||
@admin.register(Notification) |
|
||||
class NotificationAdmin(AjaxDatatable): |
|
||||
list_display = ('title', 'user', 'is_read', 'created_at') |
|
||||
list_filter = ('is_read', 'created_at') |
|
||||
search_fields = ('title', 'message', 'user__fullname') |
|
||||
list_editable = ('is_read',) |
|
||||
ordering = ('-created_at',) |
|
||||
autocomplete_fields = ['user',] |
|
||||
|
from django.contrib import admin |
||||
|
from django.utils.translation import gettext_lazy as _ |
||||
|
from ajaxdatatable.admin import AjaxDatatable |
||||
|
|
||||
|
from apps.account.models import User, Notification |
||||
|
|
||||
|
@admin.register(Notification) |
||||
|
class NotificationAdmin(AjaxDatatable): |
||||
|
list_display = ('title', 'user', 'is_read', 'created_at') |
||||
|
list_filter = ('is_read', 'created_at') |
||||
|
search_fields = ('title', 'message', 'user__fullname') |
||||
|
list_editable = ('is_read',) |
||||
|
ordering = ('-created_at',) |
||||
|
autocomplete_fields = ['user',] |
||||
@ -0,0 +1,127 @@ |
|||||
|
# Generated by Django 5.2.12 on 2026-05-04 12:53 |
||||
|
|
||||
|
import dj_language.field |
||||
|
import django.db.models.deletion |
||||
|
from django.conf import settings |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('account', '0002_alter_user_email_alter_user_username'), |
||||
|
('dj_language', '0002_auto_20220120_1344'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterModelOptions( |
||||
|
name='clientuser', |
||||
|
options={'ordering': ('-id',), 'verbose_name': 'User', 'verbose_name_plural': 'Users'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='locationhistory', |
||||
|
options={'verbose_name': 'Location History', 'verbose_name_plural': 'Location History'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='loginhistory', |
||||
|
options={'verbose_name': 'Login History', 'verbose_name_plural': 'Login Histories'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='notification', |
||||
|
options={'verbose_name': 'Notification', 'verbose_name_plural': 'Notifications'}, |
||||
|
), |
||||
|
migrations.AlterModelOptions( |
||||
|
name='user', |
||||
|
options={'ordering': ('-id',), 'verbose_name': 'User', 'verbose_name_plural': 'Users'}, |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='locationhistory', |
||||
|
name='at_time', |
||||
|
field=models.DateTimeField(auto_now_add=True, verbose_name='at time'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='locationhistory', |
||||
|
name='ip', |
||||
|
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='ip'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='locationhistory', |
||||
|
name='selected_manually', |
||||
|
field=models.BooleanField(blank=True, null=True, verbose_name='selected manually'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='locationhistory', |
||||
|
name='timezone', |
||||
|
field=models.CharField(blank=True, max_length=60, null=True, verbose_name='timezone'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='locationhistory', |
||||
|
name='user', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='location_history', to=settings.AUTH_USER_MODEL, verbose_name='user'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='loginhistory', |
||||
|
name='at_time', |
||||
|
field=models.DateTimeField(auto_now_add=True, verbose_name='at time'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='loginhistory', |
||||
|
name='device_os', |
||||
|
field=models.CharField(blank=True, max_length=16, null=True, verbose_name='Device os'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='loginhistory', |
||||
|
name='ip', |
||||
|
field=models.CharField(max_length=255, null=True, verbose_name='ip'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='loginhistory', |
||||
|
name='timezone', |
||||
|
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='timezone'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='loginhistory', |
||||
|
name='user', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='login_history', to=settings.AUTH_USER_MODEL, verbose_name='user'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='avatar', |
||||
|
field=models.ImageField(blank=True, max_length=512, null=True, upload_to='users/avatars/%Y/%m/', verbose_name='Avatar'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='deleted_at', |
||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='deleted at'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='device_os', |
||||
|
field=models.CharField(choices=[('android', 'android'), ('apple', 'apple'), ('web', 'web')], max_length=16, null=True, verbose_name='device os'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='fcm', |
||||
|
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='fcm'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='is_staff', |
||||
|
field=models.BooleanField(default=False, verbose_name='is staff'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='language', |
||||
|
field=dj_language.field.LanguageField(default=69, limit_choices_to={'status': True}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dj_language.language', verbose_name='Language'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='skill', |
||||
|
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='skill'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='user', |
||||
|
name='slug', |
||||
|
field=models.SlugField(blank=True, max_length=255, null=True, unique=True, verbose_name='slug'), |
||||
|
), |
||||
|
] |
||||
@ -1,95 +1,96 @@ |
|||||
from apps.account.models import User |
|
||||
from apps.account.manager import * |
|
||||
|
|
||||
from django.contrib.auth.models import Group |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
class ProfessorUser(User): |
|
||||
objects = ProfessorUserManager() |
|
||||
|
|
||||
def save(self, *args, **kwargs): |
|
||||
self.user_type = User.UserType.PROFESSOR |
|
||||
super().save(*args, **kwargs) |
|
||||
|
|
||||
group, _ = Group.objects.get_or_create(name="Professor Group") |
|
||||
self.groups.add(group) |
|
||||
|
|
||||
class Meta: |
|
||||
proxy = True |
|
||||
verbose_name = "Professor User" |
|
||||
verbose_name_plural = "Professor Users" |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
class ClientUser(User): |
|
||||
objects = ClientUserManager() |
|
||||
|
|
||||
def save(self, *args, **kwargs): |
|
||||
self.user_type = User.UserType.CLIENT |
|
||||
super().save(*args, **kwargs) |
|
||||
|
|
||||
group, _ = Group.objects.get_or_create(name="Client Group") |
|
||||
self.groups.add(group) |
|
||||
|
|
||||
|
|
||||
class Meta: |
|
||||
proxy = True |
|
||||
|
|
||||
verbose_name = 'user' |
|
||||
verbose_name_plural = 'users' |
|
||||
ordering = ('-id',) |
|
||||
|
|
||||
|
|
||||
|
|
||||
class AdminUser(User): |
|
||||
objects = AdminUserManager() |
|
||||
|
|
||||
def save(self, *args, **kwargs): |
|
||||
self.user_type = User.UserType.ADMIN |
|
||||
super().save(*args, **kwargs) |
|
||||
|
|
||||
group, _ = Group.objects.get_or_create(name="Admin Group") |
|
||||
self.groups.add(group) |
|
||||
|
|
||||
class Meta: |
|
||||
proxy = True |
|
||||
verbose_name = "Admin User" |
|
||||
verbose_name_plural = "Admin Users" |
|
||||
|
|
||||
|
|
||||
|
|
||||
class SuperAdminUser(User): |
|
||||
objects = SuperAdminUserManager() |
|
||||
|
|
||||
def save(self, *args, **kwargs): |
|
||||
self.user_type = User.UserType.SUPER_ADMIN |
|
||||
self.is_staff = True |
|
||||
super().save(*args, **kwargs) |
|
||||
|
|
||||
|
|
||||
|
|
||||
class Meta: |
|
||||
proxy = True |
|
||||
verbose_name = "Super Admin User" |
|
||||
verbose_name_plural = "Super Admin Users" |
|
||||
|
|
||||
|
|
||||
|
|
||||
class StudentUser(User): |
|
||||
objects = StudentUserManager() |
|
||||
|
|
||||
def save(self, *args, **kwargs): |
|
||||
self.user_type = User.UserType.STUDENT |
|
||||
super().save(*args, **kwargs) |
|
||||
|
|
||||
group, _ = Group.objects.get_or_create(name="Student Group") |
|
||||
self.groups.add(group) |
|
||||
|
|
||||
class Meta: |
|
||||
proxy = True |
|
||||
verbose_name = "Student User" |
|
||||
verbose_name_plural = "Student Users" |
|
||||
|
from django.utils.translation import gettext_lazy as _ |
||||
|
from apps.account.models import User |
||||
|
from apps.account.manager import * |
||||
|
|
||||
|
from django.contrib.auth.models import Group |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
class ProfessorUser(User): |
||||
|
objects = ProfessorUserManager() |
||||
|
|
||||
|
def save(self, *args, **kwargs): |
||||
|
self.user_type = User.UserType.PROFESSOR |
||||
|
super().save(*args, **kwargs) |
||||
|
|
||||
|
group, _ = Group.objects.get_or_create(name="Professor Group") |
||||
|
self.groups.add(group) |
||||
|
|
||||
|
class Meta: |
||||
|
proxy = True |
||||
|
verbose_name = _("Professor User") |
||||
|
verbose_name_plural = _("Professor Users") |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
class ClientUser(User): |
||||
|
objects = ClientUserManager() |
||||
|
|
||||
|
def save(self, *args, **kwargs): |
||||
|
self.user_type = User.UserType.CLIENT |
||||
|
super().save(*args, **kwargs) |
||||
|
|
||||
|
group, _ = Group.objects.get_or_create(name="Client Group") |
||||
|
self.groups.add(group) |
||||
|
|
||||
|
|
||||
|
class Meta: |
||||
|
proxy = True |
||||
|
|
||||
|
verbose_name = _('User') |
||||
|
verbose_name_plural = _('Users') |
||||
|
ordering = ('-id',) |
||||
|
|
||||
|
|
||||
|
|
||||
|
class AdminUser(User): |
||||
|
objects = AdminUserManager() |
||||
|
|
||||
|
def save(self, *args, **kwargs): |
||||
|
self.user_type = User.UserType.ADMIN |
||||
|
super().save(*args, **kwargs) |
||||
|
|
||||
|
group, _ = Group.objects.get_or_create(name="Admin Group") |
||||
|
self.groups.add(group) |
||||
|
|
||||
|
class Meta: |
||||
|
proxy = True |
||||
|
verbose_name = _("Admin User") |
||||
|
verbose_name_plural = _("Admin Users") |
||||
|
|
||||
|
|
||||
|
|
||||
|
class SuperAdminUser(User): |
||||
|
objects = SuperAdminUserManager() |
||||
|
|
||||
|
def save(self, *args, **kwargs): |
||||
|
self.user_type = User.UserType.SUPER_ADMIN |
||||
|
self.is_staff = True |
||||
|
super().save(*args, **kwargs) |
||||
|
|
||||
|
|
||||
|
|
||||
|
class Meta: |
||||
|
proxy = True |
||||
|
verbose_name = _("Super Admin User") |
||||
|
verbose_name_plural = _("Super Admin Users") |
||||
|
|
||||
|
|
||||
|
|
||||
|
class StudentUser(User): |
||||
|
objects = StudentUserManager() |
||||
|
|
||||
|
def save(self, *args, **kwargs): |
||||
|
self.user_type = User.UserType.STUDENT |
||||
|
super().save(*args, **kwargs) |
||||
|
|
||||
|
group, _ = Group.objects.get_or_create(name="Student Group") |
||||
|
self.groups.add(group) |
||||
|
|
||||
|
class Meta: |
||||
|
proxy = True |
||||
|
verbose_name = _("Student User") |
||||
|
verbose_name_plural = _("Student Users") |
||||
@ -0,0 +1,36 @@ |
|||||
|
# Generated by Django 5.2.12 on 2026-05-04 12:53 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('account', '0003_alter_clientuser_options_and_more'), |
||||
|
('certificate', '0001_initial'), |
||||
|
('course', '0006_alter_course_professor_alter_course_video_file_and_more'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='certificate', |
||||
|
name='course', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_certificates', to='course.course', verbose_name='Course'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='certificate', |
||||
|
name='created_at', |
||||
|
field=models.DateTimeField(auto_now_add=True, verbose_name='Created at'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='certificate', |
||||
|
name='status', |
||||
|
field=models.CharField(choices=[('pending', 'pending'), ('approved', 'approved'), ('canceled', 'canceled')], default='pending', max_length=10, verbose_name='Status'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='certificate', |
||||
|
name='student', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certificates', to='account.studentuser', verbose_name='Student'), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,31 @@ |
|||||
|
# Generated by Django 5.2.12 on 2026-05-04 12:53 |
||||
|
|
||||
|
import apps.course.models.course |
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('account', '0003_alter_clientuser_options_and_more'), |
||||
|
('course', '0005_alter_course_discount_percentage'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='course', |
||||
|
name='professor', |
||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses', to='account.professoruser', verbose_name='Professor'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='course', |
||||
|
name='video_file', |
||||
|
field=models.FileField(blank=True, null=True, upload_to=apps.course.models.course.course_file_upload_to, verbose_name='Video File'), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='course', |
||||
|
name='video_link', |
||||
|
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='Video Link'), |
||||
|
), |
||||
|
] |
||||
794
locale/ru/LC_MESSAGES/django.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue