Generic module

This module provide same functionality as Django Admin, but in AngularJS cloak with custom actions, modal forms client side categorizing, filtering and many more.

With Horizon

Dashboard structure:

|-- my_dashboard
    |-- __init__.py
    |-- projects
        |-- __init__.py
        |-- models.py
        |-- forms.py
        |-- managers.py
        |-- urls.py
        |-- views.py
    |-- issues
        |-- __init__.py
        |-- panel.py
    |-- dashboard.py

Simply register your ModelClass and connect it to ModelPanel which provides namespace and menu item.

from horizon import forms
from horizon_contrib.api import models
from horizon_contrib.common import register_model

from .managers import ProjectManager

class Project(models.APIModel):

    ...

    objects = ProjectManager()  # connect our manager

    class Meta:
        abstract = True
        verbose_name = "Project"
        verbose_name_plural = "Projects"

register_model(Project)  # supply django Content Types
from horizon_contrib.panel import ModelPanel
from horizon_redmine.dashboard import RedmineDashboard

class ProjectPanel(ModelPanel):
    name = "Projects"
    slug = 'projects'
    model_class = 'project'

RedmineDashboard.register(ProjectPanel)

With Django

With Django is all stuff generic we can only used or override some parts of how we want.

Dashboard structure:

my_app
    |-- __init__.py
    |-- models.py
    |-- my_dashboard
        |-- __init__.py
        |-- projects
            |-- __init__.py
            |-- panel.py
            |-- forms.py
            |-- tables.py
            |-- urls.py
            |-- views.py
        |-- issues
            |-- __init__.py
            |-- panel.py
        |-- dashboard.py

With reverse

from django.core.urlresolvers import reverse

print reverse('horizon:contrib:generic:index', args=['project'])

# render as ReactJS table
print reverse('horizon:contrib:generic:index', args=['project', 'react'])

Warning

For these purpose must be django.contrib.contenttypes in INSTALLED_APPS.