You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.6 KiB
133 lines
4.6 KiB
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)
|
|
|
|
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 = _('Главное изображение')
|
|
|