277 lines
7.7 KiB
Python
277 lines
7.7 KiB
Python
from django.contrib import admin
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import HttpResponseRedirect
|
|
from django.contrib import messages
|
|
from django.templatetags.static import static
|
|
from import_export import resources
|
|
from import_export.admin import ImportExportModelAdmin
|
|
import reversion
|
|
|
|
|
|
from .models import (
|
|
Publisher, Series, Volume, Person, Language, VolumeCollection,
|
|
SeriesSummary, SeriesPublisher
|
|
)
|
|
|
|
|
|
###
|
|
# IMPORT EXPORT RESOURCES
|
|
###
|
|
class PublisherResource(resources.ModelResource):
|
|
class Meta:
|
|
model = Publisher
|
|
|
|
|
|
class SeriesResource(resources.ModelResource):
|
|
class Meta:
|
|
model = Series
|
|
|
|
|
|
class VolumeResource(resources.ModelResource):
|
|
class Meta:
|
|
model = Volume
|
|
|
|
|
|
class PersonResource(resources.ModelResource):
|
|
search_fields = ('name', )
|
|
|
|
class Meta:
|
|
model = Person
|
|
|
|
|
|
# Actions
|
|
def mark_for_review(self, request, queryset):
|
|
queryset.update(for_review=True)
|
|
messages.success(request, _('Items marked for review'))
|
|
|
|
|
|
def unmark_for_review(self, request, queryset):
|
|
queryset.update(for_review=False)
|
|
messages.success(request, _('Items unmarked for review'))
|
|
|
|
|
|
# Modeladmin
|
|
class PublisherAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
resource_class = PublisherResource
|
|
search_fields = ('name', 'url', )
|
|
list_display = ['name', 'series_count']
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
actions = (mark_for_review, unmark_for_review, )
|
|
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
('review', _('Review')),
|
|
('advanced', _('Advanced')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('name', 'slug', 'url')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-review',),
|
|
'fields': ('for_review', 'for_review_comment')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-advanced',),
|
|
'fields': ('hidden', )
|
|
}),
|
|
]
|
|
|
|
def series_count(self, obj):
|
|
return obj.series.count()
|
|
series_count.short_description = _('Series')
|
|
|
|
admin.site.register(Publisher, PublisherAdmin)
|
|
|
|
|
|
class SeriesSummaryInline(admin.TabularInline):
|
|
model = SeriesSummary
|
|
fields = ('summary', 'language', )
|
|
|
|
|
|
class SeriesPublisherInline(admin.TabularInline):
|
|
model = SeriesPublisher
|
|
fields = ('publisher', 'status', 'actual_publisher')
|
|
|
|
|
|
class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
resource_class = SeriesResource
|
|
list_display = ['name', 'volumes_count']
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
search_fields = ('name', )
|
|
search_filters = ('hidden', )
|
|
actions = (mark_for_review, unmark_for_review, )
|
|
inlines = (SeriesSummaryInline, SeriesPublisherInline)
|
|
raw_id_fields = ('art', 'story', 'original_publisher', )
|
|
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
('volumes', _('Volumes')),
|
|
('review', _('Review')),
|
|
('advanced', _('Advanced')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('name', 'slug', 'cover', 'summary', 'finished',
|
|
'original_publisher', 'art', 'story', )
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-review',),
|
|
'fields': ('for_review', 'for_review_comment')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-advanced',),
|
|
'fields': ('hidden', 'folder')
|
|
}),
|
|
]
|
|
|
|
suit_form_includes = (
|
|
('_admin/manga/series/includes/volumes.html', 'top', 'volumes'),
|
|
)
|
|
|
|
def volumes_count(self, obj):
|
|
return obj.volumes.count()
|
|
volumes_count.short_description = _('Volumes')
|
|
|
|
admin.site.register(Series, SeriesAdmin)
|
|
|
|
|
|
class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
resource_class = VolumeResource
|
|
# list_display_links = ('number', )
|
|
list_display = ('series', 'collection', 'language', 'publisher', 'number',
|
|
'name', 'release_date',)
|
|
search_fields = ('number', 'series__name', 'publisher__name', )
|
|
list_filter = ('series', 'publisher', 'for_review', )
|
|
# list_editable = ('series', )
|
|
actions = ('change_series', mark_for_review, unmark_for_review, )
|
|
raw_id_fields = ('series', 'collection', )
|
|
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
('cover', _('Cover')),
|
|
('review', _('Review')),
|
|
('advanced', _('Advanced')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('series', 'collection', 'publisher', 'language',
|
|
'number', 'name',
|
|
'isbn_10', 'isbn_13', 'retail_price', 'pages',
|
|
'release_date', )
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-review',),
|
|
'fields': ('for_review', 'for_review_comment')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-advanced',),
|
|
'fields': ('hidden', )
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-cover'),
|
|
'fields': ('cover', )
|
|
}),
|
|
]
|
|
|
|
suit_form_includes = (
|
|
('_admin/volumes/includes/cover.html', 'bottom', 'cover'),
|
|
)
|
|
|
|
def change_series(self, request, queryset):
|
|
selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
|
|
return HttpResponseRedirect(
|
|
"{}{}".format(
|
|
reverse('_admin.manga.volume.change_series'),
|
|
"?volumes={}".format(",".join(selected))
|
|
)
|
|
)
|
|
change_series.short_description = _('Change volume series')
|
|
|
|
admin.site.register(Volume, VolumeAdmin)
|
|
|
|
|
|
class PersonAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
resource_class = PersonResource
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
('review', _('Review')),
|
|
('advanced', _('Advanced')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('name', )
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-review',),
|
|
'fields': ('for_review', 'for_review_comment')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-advanced',),
|
|
'fields': ('hidden', )
|
|
}),
|
|
]
|
|
|
|
admin.site.register(Person, PersonAdmin)
|
|
|
|
|
|
class LanguageAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
list_display = ('name', 'code', 'flag_image', )
|
|
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('name', 'code', )
|
|
})
|
|
]
|
|
|
|
def flag_image(self, obj):
|
|
return u'<img src="{src}" />'.format(
|
|
src=static('images/flags/{}.gif'.format(obj.code))
|
|
)
|
|
flag_image.short_description = _('Flag')
|
|
flag_image.allow_tags = True
|
|
|
|
admin.site.register(Language, LanguageAdmin)
|
|
|
|
|
|
class VolumeCollectionAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
list_display = ('name', 'series', 'default', )
|
|
search_fields = ('name', 'series__name', )
|
|
|
|
suit_form_tabs = (
|
|
('general', _('General')),
|
|
('review', _('Review')),
|
|
('advanced', _('Advanced')),
|
|
)
|
|
|
|
fieldsets = [
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
'fields': ('name', 'series', 'default')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-review',),
|
|
'fields': ('for_review', 'for_review_comment')
|
|
}),
|
|
(None, {
|
|
'classes': ('suit-tab suit-tab-advanced',),
|
|
'fields': ('hidden', )
|
|
}),
|
|
]
|
|
|
|
admin.site.register(VolumeCollection, VolumeCollectionAdmin)
|