Question: I have created some forms using class based views, now I like to add them to the Django Admin site. I have only found this [link](http://patrick.arminio.info/additional-admin-views/) which describes adding normal views to the Admin site.

Answer: 
Let say you have the following class based view:

```
# File: views.py
class MyAwesomeBookView(TemplateView):
    pass

```

To use this view, you have to make it `callable`

```
# File: views.py
awesome_book_view = MyAwesomeBookView.as_view()

```

Once your view is `callable`, you can pretty much treat it like how you treat a *function-based view*. 

To link it to the admin urls, you could do something like this:

```
# File: admin.py
@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):

    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            url(r'^awesome-books/$', 
                self.admin_site.admin_view(awesome_book_view)),
        ]
        return my_urls + urls

```
You can pass the class based view's `as_view` directly, without need of having a variable like `awesome_book_view` as suggested by another answer: 

Example:

in `admin.py` I have:

```
class EmailAdmin(admin.ModelAdmin):

    def get_urls(self):
        urls = super(EmailAdmin, self).get_urls()
        my_urls = [
            url(r'^send_email/$',
                self.admin_site.admin_view(SendEmailAdminView.as_view())),
        ]
        return my_urls + urls

admin.site.register(Email, EmailAdmin)

```

in `views.py` I have:

```
class SendEmailAdminView(View):

    def get(self, request):
        pass

    def post(self, request):
        pass

```

I have removed most of the code for brevity and have kept only relevant part. You can see the full [code here](https://github.com/avinassh/nightreads/tree/master/nightreads/emails).