class AdminExportCSVMap(BaseModel): admin_models = get_admin_models() model = models.CharField( max_length=255, choices=((model_name, model_name) for model_name in sorted(admin_models.keys())), verbose_name=pgettext_lazy('AdminExportCSVMap', 'model')) title = models.CharField(max_length=255, verbose_name=pgettext_lazy( 'AdminExportCSVMap', 'title')) field = models.CharField(max_length=255, verbose_name=pgettext_lazy( 'AdminExportCSVMap', 'field')) order = models.PositiveIntegerField( verbose_name=pgettext_lazy('AdminExportCSVMap', 'order')) enabled = models.BooleanField(default=True, verbose_name=pgettext_lazy( 'AdminExportCSVMap', 'enabled')) class Meta: # Define the database table db_table = 'website_admin_export_csv_maps' ordering = ['model', 'order', 'title', 'field'] unique_together = (('model', 'title'), ('model', 'order')) verbose_name = pgettext_lazy('AdminExportCSVMap', 'Admin Export CSV Map') verbose_name_plural = pgettext_lazy('AdminExportCSVMap', 'Admin Export CSV Maps') def __str__(self): return '{MODEL} - {FIELD}'.format(MODEL=self.model, FIELD=self.field)
class AdminListDisplayLink(BaseModel): admin_models = get_admin_models() model = models.CharField( max_length=255, choices=((model_name, model_name) for model_name in sorted(admin_models.keys())), verbose_name=pgettext_lazy('AdminListDisplayLink', 'model')) field = models.CharField(max_length=255, verbose_name=pgettext_lazy( 'AdminListDisplayLink', 'field')) order = models.PositiveIntegerField( verbose_name=pgettext_lazy('AdminListDisplayLink', 'order')) enabled = models.BooleanField(default=True, verbose_name=pgettext_lazy( 'AdminListDisplayLink', 'enabled')) class Meta: # Define the database table db_table = 'utility_admin_list_display_links' ordering = ['model', 'order'] unique_together = (('model', 'field'), ('model', 'order')) verbose_name = pgettext_lazy('AdminListDisplayLink', 'Admin List Display Link') verbose_name_plural = pgettext_lazy('AdminListDisplayLink', 'Admin List Display Links') def __str__(self): return '{MODEL} - {FIELD}'.format(MODEL=self.model, FIELD=self.field)
class AdminSearchable(BaseModel): admin_models = get_admin_models() model = models.CharField( max_length=255, choices=((model_name, model_name) for model_name in sorted(admin_models.keys())), verbose_name=pgettext_lazy('AdminSearchable', 'model')) field = models.CharField(max_length=255, verbose_name=pgettext_lazy( 'AdminSearchable', 'field')) ref_model = models.CharField( max_length=255, choices=((model_name, model_name) for model_name in sorted(admin_models.keys())), verbose_name=pgettext_lazy('AdminSearchable', 'referenced model')) ref_field = models.CharField(max_length=255, verbose_name=pgettext_lazy( 'AdminSearchable', 'referenced field')) description = models.TextField(blank=True, verbose_name=pgettext_lazy( 'AdminSearchable', 'description')) use_select2 = models.BooleanField( verbose_name=pgettext_lazy('AdminSearchable', 'use select 2')) class Meta: # Define the database table db_table = 'website_admin_searchable' ordering = ['model', 'field'] unique_together = ('model', 'field') verbose_name = pgettext_lazy('AdminSearchable', 'Admin Searchable') verbose_name_plural = pgettext_lazy('AdminSearchable', 'Admin Searchables') def __str__(self): return '{MODEL} - {FIELD}'.format(MODEL=self.model, FIELD=self.field)
## from django.contrib import admin from django.db.utils import OperationalError from .models import (AdminListDisplay, AdminListDisplayAdmin, AdminListDisplayLink, AdminListDisplayLinkAdmin, AdminListFilter, AdminListFilterAdmin) from utility.misc import get_admin_models, get_class_from_module admin.site.register(AdminListDisplay, AdminListDisplayAdmin) admin.site.register(AdminListDisplayLink, AdminListDisplayLinkAdmin) admin.site.register(AdminListFilter, AdminListFilterAdmin) admin_models = get_admin_models() # Customize list_display try: # Clear or initialize the model list_display for model_name in admin_models: admin_models[model_name].list_display = [] # Add the fields to model list_display for item in AdminListDisplay.objects.filter(enabled=True).order_by( 'model', 'order'): # Include only existing models if item.model in admin_models: admin_models[item.model].list_display.append(item.field) except OperationalError: # If the model AdminListDisplay doesn't yet exist skip the customization pass