Sure. I’m posting everything. The definition of the actual admin is just three lines after the imports. After the definition are some fruitless attempts at making get_form() work in my favor.
from django.contrib import admin
from django.contrib.admin.options import flatten_fieldsets, partial, forms, modelform_defines_fields, modelform_factory
from django.core.exceptions import FieldError
from django.utils.translation import ugettext as _
from contentmanager.models import ListedTextblock, ListedHeadline, EulogyText
from contentmanager.forms import EulogyTextForm, get_fields_list
from website import settings
class EulogyTextAdmin(admin.ModelAdmin):
exclude = []
form = EulogyTextForm
def get_form(self, request, obj=None, change=False, **kwargs):
# fields = get_fields_list()
exclude = []
readonly_fields = []
if 'fields' in kwargs:
fields = kwargs.pop('fields')
else:
fields = flatten_fieldsets(self.get_fieldsets(request, obj))
# excluded = self.get_exclude(request, obj)
# exclude = [] if excluded is None else list(excluded)
# readonly_fields = self.get_readonly_fields(request, obj)
# exclude.extend(readonly_fields)
# Exclude all fields if it's a change form and the user doesn't have
# the change permission.
if change and hasattr(request, 'user') and not self.has_change_permission(request, obj):
exclude.extend(fields)
# if excluded is None and hasattr(self.form, '_meta') and self.form._meta.exclude:
# # Take the custom ModelForm's Meta.exclude into account only if the
# # ModelAdmin doesn't define its own.
# exclude.extend(self.form._meta.exclude)
# if exclude is an empty list we pass None to be consistent with the
# default on modelform_factory
exclude = exclude or None
# Remove declared form fields which are in readonly_fields.
new_attrs = dict.fromkeys(f for f in readonly_fields if f in self.form.declared_fields)
# form = type(self.form.__name__, (self.form,), new_attrs)
form = EulogyTextForm
defaults = {
'form': form,
'fields': fields,
'exclude': exclude,
'formfield_callback': partial(self.formfield_for_dbfield, request=request),
**kwargs,
}
# if defaults['fields'] is None and not modelform_defines_fields(defaults['form']):
# defaults['fields'] = forms.ALL_FIELDS
try:
return modelform_factory(self.model, EulogyTextForm, fields=fields)
except FieldError as e:
raise FieldError(
'%s. Check fields/fieldsets/exclude attributes of class %s.'
% (e, self.__class__.__name__)
)
#
# # def get_form(self, request, obj=None, **kwargs):
# # kwargs['form'] = EulogyTextForm
# #
# # return super(EulogyTextAdmin, self).get_form(request, obj, **kwargs)
#
# # def get_fields(self, request, obj=None):
# # fields = super(EulogyTextAdmin, self).get_fields(request, obj)
# #
# # for i in range(len(settings.MULTITEXT_LANGUAGES)):
# # field_name = 'language%s' % (i, )
# # fields.append(field_name)
# # field_name += '_text'
# # fields.append(field_name)
# #
# # return fields
#
# def get_fieldsets(self, request, obj=None):
# fieldsets = super(EulogyTextAdmin, self).get_fieldsets(request, obj)
# new_fieldsets = list(fieldsets)
# fields = []
#
# for i in range(len(settings.MULTITEXT_LANGUAGES)):
# field_name = 'language%s' % (i, )
# fields.append(field_name)
# field_name += '_text'
# fields.append(field_name)
#
# new_fieldsets.append([_('Languages'), {'fields': fields}])
# return new_fieldsets
# def get_form(self, request, obj=None, **kwargs):
# pass
# stand alone
class ListedHeadlineAdmin(admin.ModelAdmin):
readonly_fields = ('cr_date',)
list_display = ['level']
search_fields = ['level']
class ListedTextblockAdmin(admin.ModelAdmin):
readonly_fields = ('cr_date',)
# list_display = ['level']
# search_fields = ['level']
# Adminsites for regular models
admin.site.register(ListedHeadline, ListedHeadlineAdmin)
admin.site.register(ListedTextblock, ListedTextblockAdmin)
admin.site.register(EulogyText, EulogyTextAdmin)