X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/35c2662172ee9968f169b5681b7247d98ab606b6..e9952e20295fdd1703c43ac55e18727b03f3c4ac:/admin.py diff --git a/admin.py b/admin.py index 12b9183..e9a59ad 100644 --- a/admin.py +++ b/admin.py @@ -2,6 +2,11 @@ from django.contrib import admin from django.contrib.contenttypes import generic from django.contrib.contenttypes.models import ContentType from django import forms +from django.conf import settings +from django.utils.translation import ugettext as _ +from django.utils.safestring import mark_safe +from django.utils.html import escape +from django.utils.text import truncate_words from models import * @@ -40,37 +45,72 @@ class CollectionAdmin(admin.ModelAdmin): inlines = [CollectionMemberInline] -class TemplateAdmin(admin.ModelAdmin): - prepopulated_fields = {'slug': ('name',)} +class NodeAdmin(EntityAdmin): + pass + + +class ModelLookupWidget(forms.TextInput): + # is_hidden = False + + def __init__(self, content_type, attrs=None): + self.content_type = content_type + super(ModelLookupWidget, self).__init__(attrs) + + def render(self, name, value, attrs=None): + related_url = '../../../%s/%s/' % (self.content_type.app_label, self.content_type.model) + if attrs is None: + attrs = {} + if not attrs.has_key('class'): + attrs['class'] = 'vForeignKeyRawIdAdminField' + output = super(ModelLookupWidget, self).render(name, value, attrs) + output += '' % (related_url, name) + output += '%s' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup')) + output += '' + if value: + value_class = self.content_type.model_class() + try: + value_object = value_class.objects.get(pk=value) + output += ' %s' % escape(truncate_words(value_object, 14)) + except value_class.DoesNotExist: + pass + return mark_safe(output) + + +class RedirectAdmin(NodeAdmin): fieldsets = ( (None, { - 'fields': ('parent', 'name', 'slug') + 'fields': ('slug', 'target', 'status_code') }), - ('Documentation', { + ('URL/Tree/Hierarchy', { 'classes': ('collapse', 'collapse-closed'), - 'fields': ('documentation',) + 'fields': ('parent',) }), + ) + + +class FileAdmin(NodeAdmin): + prepopulated_fields = {'slug': ('file',)} + fieldsets = ( (None, { - 'fields': ('code',) + 'fields': ('file', 'slug', 'mimetype') }), - ('Advanced', { - 'classes': ('collapse','collapse-closed'), - 'fields': ('mimetype',) + ('URL/Tree/Hierarchy', { + 'classes': ('collapse', 'collapse-closed'), + 'fields': ('parent',) }), ) - save_on_top = True - save_as = True -class PageAdmin(EntityAdmin): +class PageAdmin(NodeAdmin): + add_form_template = 'admin/philo/page/add_form.html' prepopulated_fields = {'slug': ('title',)} fieldsets = ( (None, { - 'fields': ('title', 'template') + 'fields': ('title', 'slug', 'template') }), ('URL/Tree/Hierarchy', { 'classes': ('collapse', 'collapse-closed'), - 'fields': ('parent', 'slug') + 'fields': ('parent',) }), ) list_display = ('title', 'path', 'template') @@ -80,8 +120,11 @@ class PageAdmin(EntityAdmin): def get_fieldsets(self, request, obj=None, **kwargs): fieldsets = list(self.fieldsets) if obj: # if no obj, creating a new page, thus no template set, thus no containers - page = obj - template = page.template + template = obj.template + if template.documentation: + fieldsets.append(('Template Documentation', { + 'description': template.documentation + })) contentlet_containers, contentreference_containers = template.containers for container_name in contentlet_containers: fieldsets.append((('Container: %s' % container_name), { @@ -113,10 +156,10 @@ class PageAdmin(EntityAdmin): for container_name, container_content_type in contentreference_containers: initial_content = None try: - initial_content = page.contentreferences.get(name__exact=container_name, content_type=container_content_type) + initial_content = page.contentreferences.get(name__exact=container_name, content_type=container_content_type).content.pk except ContentReference.DoesNotExist: pass - form.base_fields[('contentreference_container_%s' % container_name)] = forms.ModelChoiceField(label='References', initial=initial_content, required=False, queryset=container_content_type.model_class().objects.all()) + form.base_fields[('contentreference_container_%s' % container_name)] = forms.ModelChoiceField(label='References', widget=ModelLookupWidget(container_content_type), initial=initial_content, required=False, queryset=container_content_type.model_class().objects.all()) return form def save_model(self, request, page, form, change): @@ -141,8 +184,30 @@ class PageAdmin(EntityAdmin): contentreference.save() +class TemplateAdmin(admin.ModelAdmin): + prepopulated_fields = {'slug': ('name',)} + fieldsets = ( + (None, { + 'fields': ('parent', 'name', 'slug') + }), + ('Documentation', { + 'classes': ('collapse', 'collapse-closed'), + 'fields': ('documentation',) + }), + (None, { + 'fields': ('code',) + }), + ('Advanced', { + 'classes': ('collapse','collapse-closed'), + 'fields': ('mimetype',) + }), + ) + save_on_top = True + save_as = True + + admin.site.register(Collection, CollectionAdmin) -admin.site.register(Redirect) -admin.site.register(File) +admin.site.register(Redirect, RedirectAdmin) +admin.site.register(File, FileAdmin) admin.site.register(Page, PageAdmin) admin.site.register(Template, TemplateAdmin)