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.
 
 
 
 

138 lines
4.7 KiB

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 = _('Главное изображение')