diff --git a/services/backend/apps/competition/models.py b/services/backend/apps/competition/models.py index bd52ab7..f9d91ec 100644 --- a/services/backend/apps/competition/models.py +++ b/services/backend/apps/competition/models.py @@ -1,6 +1,7 @@ from datetime import datetime from django.db import models +from tinymce.models import HTMLField from apps.core.models import BaseModel from apps.user.models import User @@ -14,26 +15,26 @@ class Competition(BaseModel): EDU = "edu", "Образовательный" COMPETITIVE = "competitive", "Соревновательный" - title = models.CharField(max_length=100, verbose_name="Название") - description = models.TextField(verbose_name="Описание") + title = models.CharField(max_length=100, verbose_name="аазвание") + description = HTMLField(verbose_name="описание") image_url = models.FileField( - verbose_name="Изображение соревнования", null=True, blank=True + verbose_name="изображение соревнования", null=True, blank=True ) end_date = models.DateTimeField( - verbose_name="Дедлайн участия", null=True, blank=True + verbose_name="дедлайн участия", null=True, blank=True ) start_date = models.DateTimeField( - verbose_name="Дедлайн участия", null=True, blank=True + verbose_name="дедлайн участия", null=True, blank=True ) type = models.CharField( max_length=10, choices=CompetitionType.choices, - verbose_name="Тип участия", + verbose_name="тип участия", ) participation_type = models.CharField( max_length=11, choices=CompetitionParticipationType.choices, - verbose_name="Тип соревнования", + verbose_name="тип соревнования", ) participants = models.ManyToManyField(User, related_name="participants", blank=True, editable=False) diff --git a/services/backend/apps/task/models.py b/services/backend/apps/task/models.py index f9b9a4c..13dd487 100644 --- a/services/backend/apps/task/models.py +++ b/services/backend/apps/task/models.py @@ -1,6 +1,7 @@ from uuid import uuid4 from django.db import models +from tinymce.models import HTMLField from apps.competition.models import Competition from apps.core.models import BaseModel @@ -19,7 +20,7 @@ class CompetitionTask(BaseModel): competition = models.ForeignKey(Competition, on_delete=models.CASCADE) title = models.CharField(verbose_name="заголовок", max_length=50) - description = models.TextField(verbose_name="описание", max_length=300) + description = HTMLField(verbose_name="описание", max_length=300) max_attemps = models.PositiveSmallIntegerField() type = models.CharField( choices=CompetitionTaskType, max_length=8, verbose_name="тип проверки" diff --git a/services/backend/config/settings.py b/services/backend/config/settings.py index e383e80..af06a21 100644 --- a/services/backend/config/settings.py +++ b/services/backend/config/settings.py @@ -441,6 +441,7 @@ INSTALLED_APPS = [ "django_guid", "ninja", "minio_storage", + "tinymce", # Internal apps "apps.core", "apps.user", @@ -449,6 +450,22 @@ INSTALLED_APPS = [ "apps.task", ] +# tinymce +TINYMCE_DEFAULT_CONFIG = { + "theme": "silver", + "height": 500, + "menubar": False, + "plugins": "advlist,autolink,lists,link,image,charmap,print,preview,anchor," + "searchreplace,visualblocks,code,fullscreen,insertdatetime,media,table,paste," + "code,help,wordcount", + "toolbar": "undo redo | formatselect | " + "bold italic backcolor | alignleft aligncenter " + "alignright alignjustify | bullist numlist outdent indent | " + "removeformat | help", + "skin": "oxide-dark", + "content_css": "dark" +} + # GUID DJANGO_GUID = { diff --git a/services/backend/config/urls.py b/services/backend/config/urls.py index 264fcc1..f69ade8 100644 --- a/services/backend/config/urls.py +++ b/services/backend/config/urls.py @@ -12,6 +12,8 @@ admin.site.index_title = "DataRush" urlpatterns = [ + # tinymce + path('tinymce/', include('tinymce.urls')), # Admin urls path("admin/", admin.site.urls), # API urls diff --git a/services/backend/pyproject.toml b/services/backend/pyproject.toml index b6292e0..a3c2a81 100644 --- a/services/backend/pyproject.toml +++ b/services/backend/pyproject.toml @@ -13,6 +13,7 @@ dependencies = [ "django-health-check>=3.18.3", "django-minio-storage>=0.5.7", "django-ninja>=1.3.0", + "django-pagedown>=2.2.1", "django-stubs-ext>=5.1.3", "gunicorn>=23.0.0", "httpx>=0.28.1",