¡Esta es una revisión vieja del documento!
To create a super user: $ python manage.py createsuperuser
from django.contrib import admin from catalog.models import Author, Genre, Book, BookInstance admin.site.register(Book) admin.site.register(Author) admin.site.register(Genre) admin.site.register(BookInstance)
También puedes hacerlo con clases (permite añadir varios admins):
class CoopolisAdmin(AdminSite):
site_header = "Coópolis Backoffice"
site_title = "Coópolis backoffice"
index_title = "Benvingut!"
coopolis_admin_site = CoopolisAdmin(name='coopolis_admin')
coopolis_admin_site.register(User)
coopolis_admin_site.register(Project)
coopolis_admin_site.register(Course)
coopolis_admin_site.register(Activity)
Las url estarían en coopolis_admin_site.urls:
urlpatterns = [
path('entity-admin/', admin.site.urls),
path('event-admin/', coopolis_admin_site.urls),
]
Puedes registrar también ModelAdmins:
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
O con un decorador:
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
pass
Indicar los campos que se verán:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
Los ManyToMany no se verán en la lista. Aún así podemos sacar un campo como tal:
def display_genre(self):
"""Create a string for the Genre. This is required to display genre in Admin."""
return ', '.join(genre.name for genre in self.genre.all()[:3])
display_genre.short_description = 'Genre'
Los filtros pueden indicarse también:
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = ('status', 'due_back')
Important:_ To tell Django we want to perform a join instead of fetching the names of the categories one by one,we can use list_select_related
@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin):
list_display = (
'id',
'name',
'category',
)
list_select_related = (
'category',
)
To put several fields in a row:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
fields = ['first_name', 'last_name', ('date_of_birth', 'date_of_death')]
Add fieldsets (sections):
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = ('status', 'due_back')
fieldsets = (
(None, {
'fields': ('book', 'imprint', 'id')
}),
('Availability', {
'fields': ('status', 'due_back')
}),
)
You can do this by declaring inlines, of type TabularInline (horizonal layout) or StackedInline (vertical layout, just like the default model layout).
class BooksInstanceInline(admin.TabularInline):
model = BookInstance
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'display_genre')
inlines = [BooksInstanceInline]
admin.site.site_header = "UMSRA Admin" admin.site.site_title = "UMSRA Admin Portal" admin.site.index_title = "Welcome to UMSRA Researcher Portal"
class Category(models.Model):
...
class Meta:
verbose_name_plural = "Categories"
from django.contrib.auth.models import Group admin.site.unregister(Group)