A Mezzanine admin theme using Bootstrap with advanced utilities.
- Mezzanine 4.0.1
- Download it
- Add
"mezzanine_advanced_admin",
into theINSTALLED_APPS
before'mezzanine.boot'
- Comment
PACKAGE_NAME_GRAPPELLI
and removePACKAGE_NAME_GRAPPELLI
andPACKAGE_NAME_FILEBROWSER
fromOPTIONAL_APPS
- Have fun!
Download Django Filebrowser no Grappelli (see https://github.com/smacker/django-filebrowser-no-grappelli)
And set filebrowser
as PACKAGE_NAME_FILEBROWSER
and add "filebrowser",
into the INSTALLED_APPS
before django.contrib.admin
For a full bootstrap3 experience you may want to use a custom renderer for the fields. There's one available in tree that requires the django-bootstrap3
application installed. You have to add to your project settings file: :
ADVANCED_ADMIN_FIELD_RENDERER = 'mezzanine_advanced_admin.renderers.BootstrapFieldRenderer'
Messages will have alert-info
tag by default, so you may want to add Bootstrap 3 tags for different message levels to make them styled appropriately. Add to your project settings file: :
from django.contrib import messages
MESSAGE_TAGS = {
messages.SUCCESS: 'alert-success success',
messages.WARNING: 'alert-warning warning',
messages.ERROR: 'alert-danger error'
}
Now, adding messages like this: :
messages.success(request, "My success message")
messages.warning(request, "My warning message")
messages.error(request, "My error message")
will result into this:
You can inject custom html on top of any change form creating a template named admin_model_MODELNAME_change_form.html
into the application's template folder. Eg: myapp/templates/myapp/admin_model_mymodelname_change_form.html
or project/templates/myapp/admin_model_mymodelname_change_form.html
.
You can add drag&drop sorting capability to any inline with a couple of changes to your code.
First, add a position
field in your model (and sort your model accordingly), for example:
class TestSortable(models.Model):
that = models.ForeignKey(TestMe)
position = models.PositiveSmallIntegerField("Position")
test_char = models.CharField(max_length=5)
class Meta:
ordering = ('position', )
Then in your admin.py create a class to handle the inline using the mezzanine_advanced_admin.models.SortableInline
mixin, like this:
from mezzanine_advanced_admin.admin.models import SortableInline
from models import TestSortable
class TestSortable(admin.StackedInline, SortableInline):
model = TestSortable
extra = 0
You can now use the inline as usual. See the screenshots section to see what the result will look like.
This feature was brought to you by Kyle Bock. Thank you Kyle!
Compatible with both html and xhtml. To enable xhtml for your django app add the following to your settings.py: DEFAULT_CONTENT_TYPE = 'application/xhtml+xml'
All that needs to be done is change the admin widget with either formfield_overrides like this:
from mezzanine_advanced_admin.widgets import GenericContentTypeSelect
class SomeModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ForeignKey: {'widget': GenericContentTypeSelect},
}
Or if you want to be more specific:
from mezzanine_advanced_admin.widgets import GenericContentTypeSelect
class SomeModelAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'content_type':
kwargs['widget'] = GenericContentTypeSelect
return super(SomeModelAdmin, self).formfield_for_dbfield(db_field, **kwargs)
If you decide on using formfield_overrides
you should be aware of its limitations with relation fields.
This feature (and many more) was brought to you by Jacob Magnusson. Thank you Jacob!
Every code, documentation and UX contribution is welcome.
Found an issue? Report it in the bugtracker!
Have some free time? Help fixing an already filed issue, just remember to work on a separate branch please.