from django.contrib import admin from sets.admin import * from .models import * from BaseModels.admin_utils import Admin_BaseIconModel from super_inlines.admin import SuperInlineModelAdmin, SuperModelAdmin from django.utils.translation import gettext as _ from django import forms from django.utils.text import slugify from django.db.models import Min class DocArtForm(forms.ModelForm): class Meta: model = DocArt fields = '__all__' def __init__(self, *args, **kwargs): super(DocArtForm, self).__init__(*args, **kwargs) self.fields['parent'].queryset = DocArt.objects.exclude(id__exact=self.instance.id) class Admin_DocArt(SuperModelAdmin, Admin_Trans_BaseModelViewPage): form = DocArtForm def show_versions(self, obj): versions = obj.versions.filter(enable=True).values_list('name', flat=True) if versions: return ' - '.join(versions) return '-' show_versions.short_description = _('Версии') def get_queryset(self, request): queryset = super().get_queryset(request) queryset = queryset.annotate( min_version_order=Min('versions__order'), max_version_name=Min('versions__name'), ).order_by('min_version_order', 'max_version_name', 'order').distinct() return queryset fieldsets = [ (None, { 'classes': ['wide'], 'fields': ( 'name', 'url', 'enable', 'parent', 'versions', 'order', # 'title', # 'description', 'text', # 'picture', ) }), # ('SEO', { # 'classes': ['wide', 'collapse'], # 'fields': ( # 'seo_title', 'seo_description', 'seo_keywords', 'seo_text', # ) # }), ] list_display = [ 'id', 'enable', 'name', 'url', 'show_versions', # 'versions', 'parent', 'order', 'modifiedDT', 'createDT' ] # ordering = [ # # 'versions', # 'order', 'name'] prepopulated_fields = {"url": ("name_en",)} list_display_links = ['id', 'name'] list_editable = ['enable', 'order'] filter_horizontal = ['versions'] list_filter = [ 'versions', 'modifiedDT', 'createDT', ] search_fields = ['name', 'title'] # filter_horizontal = ['options'] # inlines = [Admin_StackedInline_Block] actions = ["create_copy_arts"] @admin.action(description=_("Создать копии выбранных статей")) def create_copy_arts(self, request, queryset): from BaseModels.functions import create_url for obj in queryset: obj.name += '-копия' obj.parent = None obj.url = create_url({'name': obj.name}, DocArt) obj.pk = None obj.save() self.message_user( request, _('Копии успешно созданы') ) admin.site.register(DocArt, Admin_DocArt) class Admin_DocVersion(Admin_BaseIconModel): fieldsets = [ (None, { 'classes': ['wide'], 'fields': ( 'name', 'url', 'enable', 'order', ) }), # ('SEO', { # 'classes': ['wide', 'collapse'], # 'fields': ( # 'seo_title', 'seo_description', 'seo_keywords', 'seo_text', # ) # }), ] list_display = [ 'id', 'enable', 'name', 'url', # 'title', 'order', 'modifiedDT', 'createDT' ] # ordering = ['section', 'parent_service', 'order'] # prepopulated_fields = {"url": ("name",)} list_display_links = ['id', 'name'] list_editable = ['enable', 'order'] list_filter = [ # 'section', 'parent_service', 'modifiedDT', 'createDT', ] search_fields = ['name'] # filter_horizontal = ['options'] # inlines = [Admin_StackedInline_Block] admin.site.register(DocVersion, Admin_DocVersion)