# pip install django-msms-admin

Intelligent management for multiple subclass models in django's admin site.

## Install

```shell
pip install django-msms-admin
```

## Installed Classes

- DjangoMsmsModelAbstractBase

    The base model must inherit from DjangoMsmsModelAbstractBase class. It provides app_label, model_name, type_name fields and auto save the values.

- DjangoMsmsAdmin

    The base model admin must inherit from DjangoMsmsAdmin class.

- DjangoSubclassAdmin

    All subclass models' admin must inherit from DjangoSubclassAdmin class.

## Configurations

- DjangoMsmsAdmin.subclasses

    The config item is used to provide choices in **select_subclass_model_view**. If NOT provide, the system will auto find all registered subclasses. The structure of subclasses is a three-level-tree. e.g.

    ```python
    subclasses = [{
        "title": "category1",
        "children": [{
            "title": "category11",
            "children: [
                Model1,
                Model2,
                Model3,
            ]
        },{
            "title": "category12",
            "children": [
                Model4,
                Model5,
                Model6,
            ]
        }]
    },{
        "title": "category2",
        "children": [{
            "title": "category21",
            "children": [
                Model7,
                Model8,
            ]
        },{
            "title": "category22,
            "children": [
                Model9,
            ]
        }]
    }]
    ```

- DjangoMsmsModelAbstractBase.cascade_select_description
- DjangoMsmsModelAbstractBase.cascade_select_image

    Config item cascade_select_description and cascade_select_image are use to display more information while you selected a subclass. cascade_select_image is url string of an image.


## Usage

**pro/settings.py**

```python
INSTALLED_APPS = [
    ...
    'django_simple_tags',
    'django_static_jquery3',
    'django_msms_admin',
    ...
]
```

**app/model.py**

```python
from django.db import models
from django.contrib.staticfiles.templatetags.staticfiles import static
from django_msms_admin.models import DjangoMsmsModelAbstractBase

class Book(DjangoMsmsModelAbstractBase, models.Model):
    title = models.CharField(max_length=64)
    author = models.CharField(max_length=64)

    def __str__(self):
        return self.title

class ComputerBook(Book):
    serial = models.CharField(max_length=64)

    cascade_select_description = "These books are all about computers."
    cascade_select_image = static("app/img/computer-book.jpg")

class NovelBook(Book):
    country = models.CharField(max_length=64)

```

**app/admin.py**

```python
from django.contrib import admin
from django_msms_admin.admin import DjangoMsmsAdmin
from django_msms_admin.admin import DjangoSubclassAdmin

from .models import Book
from .models import ComputerBook
from .models import NovelBook

class BookAdmin(DjangoMsmsAdmin, admin.ModelAdmin):

    list_display = ["title", "author", "type_name"]
    list_filter = ["type_name"]


admin.site.register(Book, BookAdmin)
admin.site.register(ComputerBook, DjangoSubclassAdmin)
admin.site.register(NovelBook, DjangoSubclassAdmin)
```

## Release

### v0.1.1 2020/03/05

- Add DjangoMsmsModelAbstractBase.get_real_object method.

### v0.1.0 2020/03/03

- First release.
