import uuid import pytz from django.conf import settings from django.db import models from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ # Create your models here. from pinax.blog.models import ( Post as BasePost, Revision as BaseRevision, ReviewComment as BaseReviewComment, Section as BaseSection ) from pinax.images.models import ( ImageSet as BaseImageSet, Image as BaseImage, image_upload_to) from core.models import AbstractStatusModel, AbstractDateTimeModel class Section(BaseSection, AbstractDateTimeModel): pass class Meta: verbose_name = _('Секция') verbose_name_plural = _('Секции') Section._meta.get_field('name').verbose_name = _('Название') Section._meta.get_field('enabled').verbose_name = _('Включенно') class Post(BasePost, AbstractStatusModel): def upload_file_to(self, filename): return "blog_ext/{post}/{filename}".format(**{ 'post': self.post.slug, 'filename': filename }) preview_image = models.FileField(_('Превью изображение'), upload_to=upload_file_to, null=True, blank=True) @property def sharable_url(self): """ An url to reach this post (there is a secret url for sharing unpublished posts to outside users). """ if not self.is_published or self.is_future_published: if self.secret_key: kwargs = self.blog.scoping_url_kwargs kwargs.update({"post_secret_key": self.secret_key}) return reverse_lazy("blog_ext:blog_post_secret", kwargs=kwargs) else: return "A secret sharable url for non-authenticated users is generated when you save this post." else: return self.get_absolute_url() def get_absolute_url(self): if self.is_published: if settings.PINAX_BLOG_SLUG_UNIQUE: name = "blog_ext:blog_post_slug" kwargs = { "post_slug": self.slug } else: name = "blog_ext:blog_post" if settings.USE_TZ and settings.TIME_ZONE: published = pytz.timezone(settings.TIME_ZONE).normalize(self.published) else: published = self.published kwargs = { "year": published.strftime("%Y"), "month": published.strftime("%m"), "day": published.strftime("%d"), "slug": self.slug, } else: name = "blog_ext:blog_post_pk" kwargs = { "post_pk": self.pk, } kwargs.update(self.blog.scoping_url_kwargs) return reverse_lazy(name, kwargs=kwargs) class Meta: verbose_name = _('Пост') verbose_name_plural = _('Посты') Post._meta.get_field('blog').verbose_name = _('Блог') Post._meta.get_field('section').verbose_name = _('Секция') Post._meta.get_field('title').verbose_name = _('Название') Post._meta.get_field('slug').verbose_name = _('Slug') Post._meta.get_field('author').verbose_name = _('Автор') Post._meta.get_field('markup').verbose_name = _('Разметка') Post._meta.get_field('teaser_html').verbose_name = _('Превью') Post._meta.get_field('content_html').verbose_name = _('Контент') Post._meta.get_field('image_set').verbose_name = _('Изображения') Post._meta.get_field('published').verbose_name = _('Опубликованно') Post._meta.get_field('state').verbose_name = _('Статус') Post._meta.get_field('secret_key').verbose_name = _('Секретный ключ') Post._meta.get_field('view_count').verbose_name = _('Кол-во просмотров') class Revision(BaseRevision): pass class Meta: verbose_name = _('Ревизия') verbose_name_plural = _('Ревизии') class ReviewComment(BaseReviewComment): pass class Meta: verbose_name = _('Комментарий') verbose_name_plural = _('Комментарий') ReviewComment._meta.get_field('post').verbose_name = _('Пост') ReviewComment._meta.get_field('review_text').verbose_name = _('Текст') ReviewComment._meta.get_field('timestamp').verbose_name = _('Время') ReviewComment._meta.get_field('addressed').verbose_name = _('Отправленно') class ImageSet(BaseImageSet, AbstractDateTimeModel): pass class Meta: verbose_name = _('Коллаж') verbose_name_plural = ('Коллажи') ImageSet._meta.get_field('primary_image').verbose_name = _('Главное изображение')