Simple Guide for Django Admin Interface
Tags: django, python, programming, webdev
Published: 2021-06-06 11:06:13

Building a Full Stack Application is challenging and fun. By building the full stack application we get to learn so many things like database, routing, template, etc.
But there the one most important thing we get to learn is managing data with the help of an admin panel or admin interface.

Coding for the Admin interface is quite time consuming and take a lot of efforts. also while coding for the admin interface we need to take care of securities and permissions. we would require to write middlewares and validation.

Nowadays technologies growing rapidly and come with out of the box features which makes the developers life easier. so Django also comes with a feature **Admin Interface**  to make developers life a lot easier. 

So, in this post, we will discuss the Django admin interface.

- What is Django Admin Interface
- How to access the Admin interface
- How To register model to the admin interface
- How to unregister model from the admin interface
- Customizing Django Admin interface


### What is Django Admin Interface
The admin interface is a built-in module in Django which is design for executing admin related operation that includes reading, writing, updating and deleting. from this interface, the admin can manage users and permissions related to users. 
The exciting thing about this interface is that it is highly customizable. we can customize this as we want.

### How to access the Admin interface
When we create a Django project the admin interface is by default included in `INSTALLED_APPS`.

![django admin interface.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1622900224759/QCGrpWYBi.png)

To access This admin interface on the browser write `/admin` at `localhost:8000/admin`.

![django admin interface.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1622900382829/UTiY6WEQ1.png)

You will get the Above Result and it will ask you for admin credentials to login into it. if you have Admin credentials just log in and if don't then you need to create one.

You can create one by executing this command on your terminal.

```shell
/> python manage.py createsuperuser
```
after executing the above command it will prompt you for some information like `Email Address`, `username`, `password` and  `confirm password`. it will create an admin user for you and now you can log in using these credentials.


![django admin interface (2).png](https://cdn.hashnode.com/res/hashnode/image/upload/v1622901083813/CH-P3WnWr.png)

As you can see by default it includes only two models or we can say tables that is `users` and `groups`. How to include our own models or tables into this interface? let's discuss this question in the next section.

### How To register model to the admin interface

There are different approach to register models to the Django interface.

- simple **admin.site.register** method
- using **register decorator** with ModelAdmin object


Let say we have two models named `Author` and `Book`.

- Simple **admin.site.register** method

```python
from django.contrib import admin
from .models import Author, Book

admin.site.register(Author)
admin.site.register(Book)

```
- using **register decorator** with ModelAdmin object

```python
from django.contrib import admin
from .models import Author, Book

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

```

### How to unregister model from the admin interface

Removing or unregistering the model from the admin interface is very simple you have to just write a single line of code.

```python
from django.contrib import admin
from .models import Author, Book

admin.site.unregister(Author)
admin.site.unregister(Book)

```

### Customizing Django Admin interface
Earlier I have mentioned that the Admin interface is highly customizable. so let's customize our admin interface.

#### Changing `Django administration` text, `index title` and `site title`

```python
 admin.site.site_header = "BookStore Admin"
 admin.site.site_title = "BookStore Admin Portal"
 admin.site.index_title = "Welcome to BookStore Admin Portal"
```

### Changing Models default list display, search fields, ordering and list_filters.

```python
from django.contrib import admin
from .models import Author, Book

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
     list_display = ('name','email','is_verified')
     list_filter = ('name','email')
     search_fields = ('name', 'joined_date')
     ordering = ('-joined_date',)

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
     list_display = ('title','ISBN_NO','author_name')
     list_filter = ('title','ISBN_NO','author_name')
     search_fields = ('title','ISBN_NO','author_name')
     ordering = ('-created_at',)

```

These are the basics of customization and There are tons of other stuff that we can customize. 

Django has a very vast community and there is some awesome developer who has created third party packages to customize Django. 

One of my Favorite ones is  [**Django-Jazzmin**](https://django-jazzmin.readthedocs.io/) which is a drop-in app with plenty of things you can easily customize, including a built-in UI customizer.

Thank You for Reading🙂. If you have any Suggestions or Query then let me know in the comment section.