You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.9 KiB
138 lines
4.9 KiB
# Register your models here.
|
|
from django.contrib import admin
|
|
from django.contrib import messages
|
|
from django.contrib.admin import helpers
|
|
from django.contrib.admin.utils import get_deleted_objects, model_ngettext
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.db import router
|
|
from django.template.response import TemplateResponse
|
|
from django.utils.encoding import force_text
|
|
from django.utils.translation import ugettext as _, ugettext_lazy
|
|
from jet.filters import DateRangeFilter
|
|
from rangefilter.filter import DateTimeRangeFilter
|
|
|
|
from core.models import AbstractStatusModel, Certificate, City, Currency
|
|
|
|
admin.site.site_header = 'Русские программы'
|
|
admin.site.index_title = 'Главная страница'
|
|
admin.site.site_title = 'Русские программы'
|
|
admin.site.disable_action('delete_selected')
|
|
|
|
|
|
# @TODO: translate into english and use translation
|
|
def delete_selected_safe(modeladmin, request, queryset):
|
|
"""
|
|
Default action which deletes the selected objects.
|
|
|
|
This action first displays a confirmation page which shows all the
|
|
deletable objects, or, if the user has no permission one of the related
|
|
childs (foreignkeys), a "permission denied" message.
|
|
|
|
Next, it deletes all selected objects and redirects back to the change list.
|
|
"""
|
|
opts = modeladmin.model._meta
|
|
app_label = opts.app_label
|
|
|
|
# Check that the user has delete permission for the actual model
|
|
if not modeladmin.has_delete_permission(request):
|
|
raise PermissionDenied
|
|
|
|
using = router.db_for_write(modeladmin.model)
|
|
|
|
# Populate deletable_objects, a data structure of all related objects that
|
|
# will also be deleted.
|
|
deletable_objects, model_count, perms_needed, protected = get_deleted_objects(
|
|
queryset, opts, request.user, modeladmin.admin_site, using)
|
|
|
|
# The user has already confirmed the deletion.
|
|
# Do the deletion and return a None to display the change list view again.
|
|
if request.POST.get('post') and not protected:
|
|
if perms_needed:
|
|
raise PermissionDenied
|
|
n = queryset.count()
|
|
if n:
|
|
for obj in queryset:
|
|
obj_display = force_text(obj)
|
|
modeladmin.log_deletion(request, obj, obj_display)
|
|
for obj in queryset:
|
|
obj.delete()
|
|
modeladmin.message_user(request, _("Успешно удаленно %(count)d %(items)s.") % {
|
|
"count": n, "items": model_ngettext(modeladmin.opts, n)
|
|
}, messages.SUCCESS)
|
|
# Return None to display the change list page again.
|
|
return None
|
|
|
|
if len(queryset) == 1:
|
|
objects_name = force_text(opts.verbose_name)
|
|
else:
|
|
objects_name = force_text(opts.verbose_name_plural)
|
|
|
|
if perms_needed or protected:
|
|
title = _("Невозможно удалить %(name)s") % {"name": objects_name}
|
|
else:
|
|
title = _("Вы подтверждаете?")
|
|
|
|
context = dict(
|
|
modeladmin.admin_site.each_context(request),
|
|
title=title,
|
|
objects_name=objects_name,
|
|
deletable_objects=[deletable_objects],
|
|
model_count=dict(model_count).items(),
|
|
queryset=queryset,
|
|
perms_lacking=perms_needed,
|
|
protected=protected,
|
|
opts=opts,
|
|
action_checkbox_name=helpers.ACTION_CHECKBOX_NAME,
|
|
media=modeladmin.media,
|
|
)
|
|
|
|
request.current_app = modeladmin.admin_site.name
|
|
|
|
# Display the confirmation page
|
|
return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [
|
|
"admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.model_name),
|
|
"admin/%s/delete_selected_confirmation.html" % app_label,
|
|
"admin/delete_selected_confirmation.html"
|
|
], context)
|
|
|
|
|
|
delete_selected_safe.short_description = ugettext_lazy("Удалить выбранное из %(verbose_name_plural)s")
|
|
|
|
|
|
class SafeModelAdmin(admin.ModelAdmin):
|
|
actions = [
|
|
delete_selected_safe,
|
|
]
|
|
exclude = ('create_at', 'updated_at')
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return issubclass(self.model, AbstractStatusModel)
|
|
|
|
def get_actions(self, request):
|
|
actions = super().get_actions(request)
|
|
if 'delete_selected_safe' in actions and not issubclass(self.model, AbstractStatusModel):
|
|
del actions['delete_selected_safe']
|
|
return actions
|
|
|
|
|
|
@admin.register(Certificate)
|
|
class CertAdmin(SafeModelAdmin):
|
|
list_display = ('name','image', 'status')
|
|
search_fields = ('name',)
|
|
list_filter = ('status',)
|
|
|
|
|
|
@admin.register(City)
|
|
class CityAdmin(admin.ModelAdmin):
|
|
list_display = ('name',)
|
|
search_fields = ('name',)
|
|
|
|
|
|
@admin.register(Currency)
|
|
class CurrencyAdmin(admin.ModelAdmin):
|
|
list_display = ('name', 'code', 'sign', 'value')
|
|
list_filter = (
|
|
('create_at', DateRangeFilter), ('updated_at', DateTimeRangeFilter)
|
|
)
|
|
search_fields = ('name', 'code', 'sign')
|
|
|
|
|