Source code for lotus.admin.article

from django.conf import settings
from django.contrib import admin
from django.urls import path
from django.utils.translation import gettext_lazy as _

from smart_media.admin import SmartModelAdmin

from ..forms import ArticleAdminForm
from ..models import Article
from ..views.admin import ArticleAdminTranslateView

from ..admin_filters import (
    LanguageListFilter,
    PublicationFilter,
    TranslationStateListFilter,
)


LANGUAGE_NAMES = dict(settings.LANGUAGES)
"""
Shortcut to get setting as a dict
"""


[docs] @admin.register(Article) class ArticleAdmin(SmartModelAdmin): form = ArticleAdminForm list_display = ( "title", "is_published", "publish_datetime", "language_name", "is_original", "pinned", "featured", "last_update", "private", ) list_filter = ( LanguageListFilter, TranslationStateListFilter, PublicationFilter, "pinned", "featured", "private", "categories", ) prepopulated_fields = { "slug": ("title",), } ordering = Article.COMMON_ORDER_BY search_fields = [ "title", "seo_title", "lead", "introduction", "content", ] filter_horizontal = ( "categories", "authors", "related", ) fieldsets = ( ( None, { "fields": ( "title", "slug", ) } ), ( _("Language"), { "fields": ( ("language", "original"), ) } ), ( _("Parameters"), { "fields": ( "status", ("featured", "pinned", "private"), ) } ), ( _("Dates"), { "fields": ( ("publish_date", "publish_time"), "publish_end", ) } ), ( _("Content"), { "fields": ( "cover", "introduction", "image", "content", ) } ), ( _("SEO"), { "fields": ( "seo_title", "lead", ) } ), ( _("Relations"), { "fields": ( "album", "categories", "tags", "authors", "related", ) } ), ) class Media: css = settings.LOTUS_ADMIN_ARTICLE_ASSETS.get("css", None) js = settings.LOTUS_ADMIN_ARTICLE_ASSETS.get("js", None)
[docs] def language_name(self, obj): """ Return humanized name for object language code. """ if obj.language in LANGUAGE_NAMES: return LANGUAGE_NAMES[obj.language] return "{} (disabled)".format(obj.language)
language_name.short_description = _("language") language_name.admin_order_field = "language"
[docs] def publish_datetime(self, obj): """ Return the merged publish date and time. """ return obj.publish_datetime()
publish_datetime.short_description = _("publish date") publish_datetime.admin_order_field = "-publish_date"
[docs] def is_published(self, obj): """ Check for all publication criterias. """ return obj.is_published()
is_published.short_description = _("published") is_published.boolean = True
[docs] def is_original(self, obj): """ Check article is an original or a translation. """ return obj.original is None
is_original.short_description = _("original") is_original.boolean = True
[docs] def get_urls(self): """ Set some additional custom admin views """ urls = super().get_urls() extra_urls = [ path( "translate/<int:id>/", self.admin_site.admin_view( ArticleAdminTranslateView.as_view(), ), {"model_admin": self}, name="lotus_article_translate_original", ) ] return extra_urls + urls