2014-03-18 15:54:01 +00:00
|
|
|
from django.contrib import admin
|
2014-03-26 14:48:22 +00:00
|
|
|
from django.utils.translation import ugettext_lazy as _
|
2014-04-25 10:47:26 +00:00
|
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from django.http import HttpResponseRedirect
|
2014-04-25 15:18:37 +00:00
|
|
|
from django.contrib import messages
|
2014-08-25 11:45:55 +00:00
|
|
|
from django.templatetags.static import static
|
2014-05-19 21:13:08 +00:00
|
|
|
from import_export import resources
|
|
|
|
from import_export.admin import ImportExportModelAdmin
|
2014-03-18 15:54:01 +00:00
|
|
|
import reversion
|
2014-05-19 21:13:08 +00:00
|
|
|
|
|
|
|
|
2014-08-25 18:58:25 +00:00
|
|
|
from .models import (
|
|
|
|
Publisher, Series, Volume, Person, Language, VolumeCollection,
|
|
|
|
SeriesSummary, SeriesPublisher
|
|
|
|
)
|
2014-03-18 15:54:01 +00:00
|
|
|
|
|
|
|
|
2014-05-19 21:13:08 +00:00
|
|
|
###
|
|
|
|
# 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):
|
|
|
|
class Meta:
|
|
|
|
model = Person
|
|
|
|
|
|
|
|
|
2014-04-25 15:18:37 +00:00
|
|
|
# Actions
|
|
|
|
def mark_for_review(self, request, queryset):
|
|
|
|
queryset.update(for_review=True)
|
|
|
|
messages.success(request, _('Items marked for review'))
|
|
|
|
|
2014-05-19 21:13:08 +00:00
|
|
|
|
2014-04-25 15:18:37 +00:00
|
|
|
def unmark_for_review(self, request, queryset):
|
|
|
|
queryset.update(for_review=False)
|
|
|
|
messages.success(request, _('Items unmarked for review'))
|
|
|
|
|
|
|
|
|
|
|
|
# Modeladmin
|
2014-05-19 21:13:08 +00:00
|
|
|
class PublisherAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
|
|
resource_class = PublisherResource
|
2014-08-25 11:45:55 +00:00
|
|
|
search_fields = ('name', 'url', )
|
2014-03-26 14:48:22 +00:00
|
|
|
list_display = ['name', 'series_count']
|
2014-04-02 13:31:19 +00:00
|
|
|
prepopulated_fields = {"slug": ("name",)}
|
2014-04-25 15:18:37 +00:00
|
|
|
actions = (mark_for_review, unmark_for_review, )
|
2014-03-26 14:48:22 +00:00
|
|
|
|
2014-04-25 16:12:50 +00:00
|
|
|
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', )
|
|
|
|
}),
|
|
|
|
]
|
|
|
|
|
2014-03-26 14:48:22 +00:00
|
|
|
def series_count(self, obj):
|
|
|
|
return obj.series.count()
|
|
|
|
series_count.short_description = _('Series')
|
2014-03-18 15:54:01 +00:00
|
|
|
|
|
|
|
admin.site.register(Publisher, PublisherAdmin)
|
|
|
|
|
|
|
|
|
2014-08-25 18:58:25 +00:00
|
|
|
class SeriesSummaryInline(admin.TabularInline):
|
|
|
|
model = SeriesSummary
|
|
|
|
fields = ('summary', 'language', )
|
2015-02-01 12:55:52 +00:00
|
|
|
suit_classes = 'suit-tab suit-tab-summaries'
|
2014-08-25 18:58:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
class SeriesPublisherInline(admin.TabularInline):
|
|
|
|
model = SeriesPublisher
|
|
|
|
fields = ('publisher', 'status', 'actual_publisher')
|
2015-02-01 12:55:52 +00:00
|
|
|
suit_classes = 'suit-tab suit-tab-publishers'
|
2014-08-25 18:58:25 +00:00
|
|
|
|
2014-08-26 07:55:14 +00:00
|
|
|
|
2014-05-19 21:13:08 +00:00
|
|
|
class SeriesAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
|
|
resource_class = SeriesResource
|
2014-03-26 14:48:22 +00:00
|
|
|
list_display = ['name', 'volumes_count']
|
2014-04-02 12:33:14 +00:00
|
|
|
prepopulated_fields = {"slug": ("name",)}
|
2014-04-22 22:34:04 +00:00
|
|
|
search_fields = ('name', )
|
|
|
|
search_filters = ('hidden', )
|
2014-04-25 15:18:37 +00:00
|
|
|
actions = (mark_for_review, unmark_for_review, )
|
2014-08-25 18:58:25 +00:00
|
|
|
inlines = (SeriesSummaryInline, SeriesPublisherInline)
|
2014-08-26 07:55:14 +00:00
|
|
|
raw_id_fields = ('art', 'story', 'original_publisher', )
|
2014-03-26 14:48:22 +00:00
|
|
|
|
2014-04-25 16:12:50 +00:00
|
|
|
suit_form_tabs = (
|
|
|
|
('general', _('General')),
|
2015-02-01 12:55:52 +00:00
|
|
|
('publishers', _('Publishers')),
|
2014-04-25 16:12:50 +00:00
|
|
|
('volumes', _('Volumes')),
|
2015-02-01 12:55:52 +00:00
|
|
|
('summaries', _('Summary')),
|
2014-04-25 16:12:50 +00:00
|
|
|
('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'),
|
|
|
|
)
|
|
|
|
|
2014-03-26 14:48:22 +00:00
|
|
|
def volumes_count(self, obj):
|
2014-04-25 10:47:26 +00:00
|
|
|
return obj.volumes.count()
|
2014-03-26 14:48:22 +00:00
|
|
|
volumes_count.short_description = _('Volumes')
|
|
|
|
|
2014-03-18 15:54:01 +00:00
|
|
|
admin.site.register(Series, SeriesAdmin)
|
|
|
|
|
|
|
|
|
2014-05-19 21:13:08 +00:00
|
|
|
class VolumeAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
|
|
resource_class = VolumeResource
|
2014-04-24 15:29:56 +00:00
|
|
|
# list_display_links = ('number', )
|
2014-08-26 07:55:14 +00:00
|
|
|
list_display = ('series', 'collection', 'language', 'publisher', 'number',
|
|
|
|
'name', 'release_date',)
|
2014-08-27 09:29:59 +00:00
|
|
|
search_fields = ('number', 'series__name', 'publisher__name', )
|
|
|
|
list_filter = ('series', 'publisher', 'for_review', )
|
2014-04-24 15:29:56 +00:00
|
|
|
# list_editable = ('series', )
|
2014-04-25 15:18:37 +00:00
|
|
|
actions = ('change_series', mark_for_review, unmark_for_review, )
|
2014-08-26 07:55:14 +00:00
|
|
|
raw_id_fields = ('series', 'collection', )
|
2014-04-25 10:47:26 +00:00
|
|
|
|
2014-04-25 16:12:50 +00:00
|
|
|
suit_form_tabs = (
|
|
|
|
('general', _('General')),
|
2014-08-24 10:23:59 +00:00
|
|
|
('cover', _('Cover')),
|
2014-04-25 16:12:50 +00:00
|
|
|
('review', _('Review')),
|
|
|
|
('advanced', _('Advanced')),
|
|
|
|
)
|
|
|
|
|
|
|
|
fieldsets = [
|
|
|
|
(None, {
|
|
|
|
'classes': ('suit-tab suit-tab-general',),
|
2014-08-25 21:11:47 +00:00
|
|
|
'fields': ('series', 'collection', 'publisher', 'language',
|
|
|
|
'number', 'name',
|
2014-04-25 16:12:50 +00:00
|
|
|
'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', )
|
|
|
|
}),
|
2014-08-25 11:45:55 +00:00
|
|
|
(None, {
|
|
|
|
'classes': ('suit-tab suit-tab-cover'),
|
|
|
|
'fields': ('cover', )
|
|
|
|
}),
|
2014-04-25 16:12:50 +00:00
|
|
|
]
|
|
|
|
|
2014-08-24 10:23:59 +00:00
|
|
|
suit_form_includes = (
|
2014-08-25 11:45:55 +00:00
|
|
|
('_admin/volumes/includes/cover.html', 'bottom', 'cover'),
|
2014-08-24 10:23:59 +00:00
|
|
|
)
|
|
|
|
|
2014-04-25 10:47:26 +00:00
|
|
|
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')
|
2014-03-18 15:54:01 +00:00
|
|
|
|
|
|
|
admin.site.register(Volume, VolumeAdmin)
|
2014-04-22 22:34:04 +00:00
|
|
|
|
|
|
|
|
2014-05-19 21:13:08 +00:00
|
|
|
class PersonAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
|
|
resource_class = PersonResource
|
2015-01-31 14:06:54 +00:00
|
|
|
search_fields = ('name', )
|
2014-04-25 16:12:50 +00:00
|
|
|
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', )
|
|
|
|
}),
|
|
|
|
]
|
2014-04-22 22:34:04 +00:00
|
|
|
|
|
|
|
admin.site.register(Person, PersonAdmin)
|
2014-08-25 11:45:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
class LanguageAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|
|
|
list_display = ('name', 'code', 'flag_image', )
|
|
|
|
|
2014-08-25 18:58:25 +00:00
|
|
|
suit_form_tabs = (
|
|
|
|
('general', _('General')),
|
|
|
|
)
|
|
|
|
|
|
|
|
fieldsets = [
|
|
|
|
(None, {
|
|
|
|
'classes': ('suit-tab suit-tab-general',),
|
|
|
|
'fields': ('name', 'code', )
|
|
|
|
})
|
|
|
|
]
|
|
|
|
|
2014-08-25 11:45:55 +00:00
|
|
|
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)
|
2014-08-25 18:58:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
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)
|