Advertisement
kastielspb

BaseTemplateModelAdmin

Jun 5th, 2018
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. class FilesAdminInline(admin.TabularInline):
  2.     model = Files
  3.     extra = 0
  4.  
  5.  
  6. """
  7.    Available presets:
  8.        TEMPLATE_NAMES.template_name: [],
  9.        TEMPLATE_NAMES.template_name: ['', ['field1', 'field2']],
  10.        TEMPLATE_NAMES.template_name: ['', [], [inline1, inline2]],
  11.        TEMPLATE_NAMES.template_name: ['', ['field1', 'field2'], [inline1, inline2]],
  12.        TEMPLATE_NAMES.template_name: ['tab_name', ['field1', 'field2'], [inline1, inline2]],
  13. """
  14. presets = {
  15.  
  16.     TEMPLATE_NAMES.base: ['', ['html']],
  17.  
  18.     TEMPLATE_NAMES.about: ['', ['html'], [FilesAdminInline]],
  19.  
  20.     TEMPLATE_NAMES.proprietors: [],
  21.  
  22.     TEMPLATE_NAMES.often_questions: ['', [], []],
  23.  
  24.     TEMPLATE_NAMES.contacts: [],
  25. }
  26.  
  27.  
  28. @admin.register(BaseTemplateModel)
  29. class BaseTemplateModelAdmin(admin.ModelAdmin):
  30.     list_display = ['title', 'slug', 'template_name', 'get_href']
  31.  
  32.     def update_fieldsets(self, _fieldsets, _preset):
  33.         names = [tab[0] for tab in _fieldsets if len(tab)]
  34.  
  35.         _name = _preset[0] if len(_preset) else ''
  36.         _fields = _preset[1] if len(_preset) > 1 else []
  37.  
  38.         self.inlines = _preset[2] if len(_preset) > 2 else []
  39.  
  40.         if _name not in names:
  41.             return _fieldsets.append([_name, {'fields': _fields}])
  42.  
  43.         if _fields:
  44.             _fieldsets[names.index(_name)][1]['fields'].extend(_fields)
  45.         return _fieldsets
  46.  
  47.     def get_fieldsets(self, request, obj=None):
  48.         fieldsets = [['', {'fields': ['template_name', 'slug', 'background', 'title']}]]
  49.         if obj:
  50.             fieldsets[0][1]['fields'].append('get_link')
  51.             self.readonly_fields += ('get_link',)
  52.  
  53.             self.update_fieldsets(fieldsets, presets[obj.template_name])
  54.         return fieldsets
  55.  
  56.     def get_link(self, obj):
  57.         return mark_safe(f'<a href="{obj.get_absolute_url()}">{_("Перейти")}</a>')
  58.     get_link.short_description = 'Ссылка'
  59.     get_link.allow_tags = True
  60.  
  61.     def get_href(self, obj):
  62.         return obj.get_absolute_url()
  63.     get_href.short_description = 'Ссылки'
  64.     get_href.allow_tags = True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement