# blog/admin.py
from django.contrib import admin
from blog.models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ["title", "slug", "author", "publish", "status"]
list_filter = ["status", "created", "publish", "author"]
search_fields = ["title", "body"]
prepopulated_fields = {"slug": ("title",)}
raw_id_fields = ["author"]
date_hierarchy = "publish"
ordering = ["status", "publish"]
show_facets = admin.ShowFacets.ALWAYS
It is even possible to search for ForeignKey
relations with the search_fields
.
This is the syntax:
search_fields = ["foreign_key__related_fieldname"]
In our case I could use the FormeignKey
relation of user
to search for it, like:
search_fields = ["user__email"]
So, I would be able to search for a user
instance by email address.
list_display
: By default, your admin panel will display the __str__()
representation of each object, and by using the list_display
obtion, you can specify which attributes of the model are displayed in the admin panel. Note that a ForeignKey
field will display the __str__()
representation of the related object, ManyToManyFields
are not supported and if you want to display a BooleanField
, Django will display a pretty 'yes' or 'no' or 'unknown' icon.list_filter
: When the list_filter
option is set, you activate a filter option on the right-hand side of the admin panel. In my case, I used the list option to simply filter the filenames.search_fields
: Adding search_fields
adds a search bar at the top of the page to the admin panel. The fields used in the list of search_fields
should be all kinds of text fields, such as CharField
or TextField
.