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(
'