Browse Source

Hide some models from admin

Using custom admin + templatetags
Jocelyn Delande 9 years ago
parent
commit
07ab2a9184

+ 84 - 0
costs/templates/admin/index.html

@@ -0,0 +1,84 @@
+{% extends "admin/base_site.html" %}
+{% load i18n static costs_admin_tags %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %}
+
+{% block coltype %}colMS{% endblock %}
+
+{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block content %}
+<div id="content-main">
+
+{% if app_list %}
+    {% for app in app_list reversed %}
+        <div class="app-{{ app.app_label }} module">
+        <table>
+        <caption>
+            <a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">{{ app.name }}</a>
+        </caption>
+        {% for model in app.models %}
+            {% if not model|is_hidden:app %}
+                <tr class="model-{{ model.object_name|lower }}">
+                {% if model.admin_url %}
+                    <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
+                {% else %}
+                    <th scope="row">{{ model.name }}</th>
+                {% endif %}
+
+                {% if model.add_url %}
+                    <td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td>
+                {% else %}
+                    <td>&nbsp;</td>
+                {% endif %}
+
+                {% if model.admin_url %}
+                    <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
+                {% else %}
+                    <td>&nbsp;</td>
+                {% endif %}
+                </tr>
+            {% endif %}
+        {% endfor %}
+        </table>
+        </div>
+    {% endfor %}
+{% else %}
+    <p>{% trans "You don't have permission to edit anything." %}</p>
+{% endif %}
+</div>
+{% endblock %}
+
+{% block sidebar %}
+<div id="content-related">
+    <div class="module" id="recent-actions-module">
+        <h2>{% trans 'Recent actions' %}</h2>
+        <h3>{% trans 'My actions' %}</h3>
+            {% load log %}
+            {% get_admin_log 10 as admin_log for_user user %}
+            {% if not admin_log %}
+            <p>{% trans 'None available' %}</p>
+            {% else %}
+            <ul class="actionlist">
+            {% for entry in admin_log %}
+            <li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
+                {% if entry.is_deletion or not entry.get_admin_url %}
+                    {{ entry.object_repr }}
+                {% else %}
+                    <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+                {% endif %}
+                <br/>
+                {% if entry.content_type %}
+                    <span class="mini quiet">{% filter capfirst %}{{ entry.content_type }}{% endfilter %}</span>
+                {% else %}
+                    <span class="mini quiet">{% trans 'Unknown content' %}</span>
+                {% endif %}
+            </li>
+            {% endfor %}
+            </ul>
+            {% endif %}
+    </div>
+</div>
+{% endblock %}

+ 14 - 0
costs/templatetags/costs_admin_tags.py

@@ -0,0 +1,14 @@
+from django import template
+
+register = template.Library()
+
+hidden_models = {
+    'costs': ('Service', 'Cost', 'Good')
+}
+
+
+@register.filter
+def is_hidden(model, app):
+    return (
+        (app['app_label'] in hidden_models) and
+        (model['object_name'] in hidden_models[app['app_label']]))

+ 27 - 0
transparency/admin.py

@@ -0,0 +1,27 @@
+from django.contrib.admin import AdminSite
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.auth import get_user_model
+
+User = get_user_model()
+
+from costs.admin import CostAdmin, DocumentAdmin, GoodAdmin, ServiceAdmin
+from costs.models import Cost, Document, Good, Service
+
+
+class MyAdminSite(AdminSite):
+    # Some models available for new/change but not listed in index pages.
+    hidden_models = ['service', 'cost', 'good']
+
+    def each_context(self, request):
+        out = super().each_context(request)
+        out['hidden_models'] = self.hidden_models
+        return out
+
+
+admin_site = MyAdminSite()
+admin_site.register(User, UserAdmin)
+
+admin_site.register(Cost, CostAdmin)
+admin_site.register(Document, DocumentAdmin)
+admin_site.register(Good, GoodAdmin)
+admin_site.register(Service, ServiceAdmin)

+ 1 - 1
transparency/settings.py

@@ -29,13 +29,13 @@ ALLOWED_HOSTS = []
 # Application definition
 # Application definition
 
 
 INSTALLED_APPS = (
 INSTALLED_APPS = (
-    'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'django.contrib.staticfiles',
     'costs',
     'costs',
+    'django.contrib.admin.apps.SimpleAdminConfig',
 )
 )
 
 
 MIDDLEWARE_CLASSES = (
 MIDDLEWARE_CLASSES = (

+ 2 - 1
transparency/urls.py

@@ -15,12 +15,13 @@ Including another URLconf
 """
 """
 from django.conf.urls import include, url
 from django.conf.urls import include, url
 from django.contrib import admin
 from django.contrib import admin
+from transparency.admin import admin_site
 import costs.urls
 import costs.urls
 from django.views.generic import RedirectView
 from django.views.generic import RedirectView
 
 
 
 
 urlpatterns = [
 urlpatterns = [
-    url(r'^admin/', include(admin.site.urls)),
+    url(r'^admin/', include(admin_site.urls)),
     url(r'^transparency/', include(costs.urls)),
     url(r'^transparency/', include(costs.urls)),
     url(r'^$', RedirectView.as_view(
     url(r'^$', RedirectView.as_view(
         pattern_name='index', permanent=False)),
         pattern_name='index', permanent=False)),