Source code for oioioi.newsfeed.models

from django.db import models
from django.utils.safestring import mark_safe
from django.utils.translation import get_language, get_language_from_request
from django.utils.translation import gettext_lazy as _
from mistune import Markdown

from oioioi.base.utils.deps import check_django_app_dependencies

check_django_app_dependencies(__name__, ['oioioi.portals'])


[docs]class News(models.Model):
[docs] date = models.DateTimeField(auto_now_add=True, verbose_name=_("date"))
[docs] def get_content(self, request=None): if request is not None: lang = get_language_from_request(request) try: return self.versions.get(language=lang) except NewsLanguageVersion.DoesNotExist: pass try: return self.versions.get(language=get_language()) except NewsLanguageVersion.DoesNotExist: return self.versions.first()
[docs]class NewsLanguageVersion(models.Model): """Represents a content of a news. News may have multiple versions - each in another language. """
[docs] news = models.ForeignKey(News, related_name='versions', on_delete=models.CASCADE)
[docs] language = models.CharField(max_length=6, verbose_name=_("language code"))
[docs] title = models.CharField(max_length=255, verbose_name=_("title"))
[docs] content = models.TextField(verbose_name=_("content"))
[docs] def rendered_content(self): return mark_safe(Markdown(escape=True).render(self.content))
[docs] def save(self, *args, **kwargs): try: existing_language_version = self.news.versions.get(language=self.language) if self != existing_language_version: raise ValueError( 'Creating NewsLanguageVersion for News object' ' that already has a NewsLanguageVersion with' ' the given language.' ) except NewsLanguageVersion.DoesNotExist: pass return super(NewsLanguageVersion, self).save(*args, **kwargs)