from django import forms from django.contrib import admin, messages from django.urls import reverse from django.utils.html import mark_safe from reversion_compare.admin import CompareVersionAdmin from notesfrombelow.admin import editor_site from . import models class TagAdmin(CompareVersionAdmin): list_display = ['name', 'show_image', 'slug', 'category'] prepopulated_fields = {'slug': ('name',)} search_fields = ['name'] def show_image(self, obj): if obj.image: to_return = ''.format( obj.image.url, ) return mark_safe(to_return) else: return '' show_image.short_description = 'Image' class IssueAdmin(CompareVersionAdmin): list_display = ['number', 'title', 'date', 'slug'] prepopulated_fields = {'slug': ('title',)} search_fields = ['title'] class CategoryAdmin(CompareVersionAdmin): list_display = ['name', 'slug', 'tag_name', 'order_on_homepage'] prepopulated_fields = {'slug': ('name',)} class AuthorAdmin(CompareVersionAdmin): list_display = ['name', 'bio', 'slug', 'twitter'] prepopulated_fields = {'slug': ('name',)} ordering = ['name'] search_fields = ['name'] class ArticleForm(forms.ModelForm): class Meta: model = models.Article fields = '__all__' widgets = { 'image_credit': forms.TextInput(), 'subtitle': forms.Textarea({'rows': 2}), } def publish(modeladmin, request, queryset): queryset.update(published=True) messages.info(request, "Published {} article(s)".format( queryset.count()) ) def remove_tags(modeladmin, request, queryset): for article in queryset: article.tags.remove() messages.info(request, "Removed tags from {} article(s)".format( queryset.count()) ) def make_add_tag_action(tag): def add_tag(modeladmin, request, queryset): for article in queryset: article.tags.add(tag) messages.info(request, "Added tag '{}' to {} article(s)".format( tag.name, queryset.count()) ) add_tag.short_description = "Add tag '{}'".format(tag.name) add_tag.__name__ = 'add_tag_{0}'.format(tag.pk) return add_tag class ArticleAdmin(CompareVersionAdmin): list_display = ['display_title', 'date', 'show_image', 'display_tags', 'published', 'is_featured'] list_filter = ['category', 'tags', 'issue'] prepopulated_fields = {'slug': ('title',)} change_form_template = 'admin/edit_article.html' form = ArticleForm list_display_links = None search_fields = ['title'] autocomplete_fields = ['related_1', 'related_2', 'issue', 'tags', 'authors'] def display_title(self, obj): if obj.authors.count(): authors = ', '.join(a.name for a in obj.authors.all()) else: authors = 'anonymous' to_return = ( '
{slug}
'.format(
edit=reverse('editor:journal_article_change', args=[obj.id]),
title=obj.title,
subtitle=obj.subtitle or 'No subtitle',
authors=authors,
view=obj.get_absolute_url(),
slug=obj.slug,
)
)
return mark_safe(to_return)
display_title.short_description = 'Article details'
def display_tags(self, obj):
html = []
if obj.issue:
html.append(
'Issue {n}: {i} (#{o})'.format(
u=reverse('editor:journal_issue_change', args=[obj.issue.id]),
n=obj.issue.number,
i=obj.issue.title,
o=obj.order_in_issue
)
)
if obj.category:
html.append(
'{c}'.format(
u=reverse('editor:journal_category_change', args=[obj.category.id]),
c=obj.category
)
)
for tag in obj.tags.all():
html.append(
'