Pre-merge cleanup.
[philo.git] / admin.py
index 61a1fb8..9e991d9 100644 (file)
--- a/admin.py
+++ b/admin.py
@@ -12,6 +12,9 @@ from django.core.exceptions import ValidationError, ObjectDoesNotExist
 from validators import TreeParentValidator, TreePositionValidator
 
 
+COLLAPSE_CLASSES = ('collapse', 'collapse-closed', 'closed',)
+
+
 class AttributeInline(generic.GenericTabularInline):
        ct_field = 'entity_content_type'
        ct_fk_field = 'entity_object_id'
@@ -39,7 +42,7 @@ class CollectionMemberInline(admin.TabularInline):
        fk_name = 'collection'
        model = CollectionMember
        extra = 1
-       classes = ('collapse-closed',)
+       classes = COLLAPSE_CLASSES
        allow_add = True
        fields = ('member_content_type', 'member_object_id', 'index',)
 
@@ -49,11 +52,42 @@ class CollectionAdmin(admin.ModelAdmin):
        list_display = ('name', 'description', 'get_count')
 
 
+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 += '<a href="%s" class="related-lookup" id="lookup_id_%s" onclick="return showRelatedObjectLookupPopup(this);">' % (related_url, name)
+               output += '<img src="%simg/admin/selector-search.gif" width="16" height="16" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup'))
+               output += '</a>'
+               if value:
+                       value_class = self.content_type.model_class()
+                       try:
+                               value_object = value_class.objects.get(pk=value)
+                               output += '&nbsp;<strong>%s</strong>' % escape(truncate_words(value_object, 14))
+                       except value_class.DoesNotExist:
+                               pass
+               return mark_safe(output)
+
+
 class TreeForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
                super(TreeForm, self).__init__(*args, **kwargs)
                instance = self.instance
-               instance_class=self.get_instance_class()
+               instance_class = self.get_instance_class()
                
                if instance_class is not None:
                        try:
@@ -84,57 +118,6 @@ class TreeForm(forms.ModelForm):
                return cleaned_data
 
 
-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
-       list_display = ('__unicode__', 'slug', 'get_path',)
-       form = TreeForm
-
-
-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 += '<a href="%s" class="related-lookup" id="lookup_id_%s" onclick="return showRelatedObjectLookupPopup(this);">' % (related_url, name)
-               output += '<img src="%simg/admin/selector-search.gif" width="16" height="16" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, _('Lookup'))
-               output += '</a>'
-               if value:
-                       value_class = self.content_type.model_class()
-                       try:
-                               value_object = value_class.objects.get(pk=value)
-                               output += '&nbsp;<strong>%s</strong>' % escape(truncate_words(value_object, 14))
-                       except value_class.DoesNotExist:
-                               pass
-               return mark_safe(output)
-
-
 class NodeForm(TreeForm):
        def get_instance_class(self):
                return Node
@@ -145,21 +128,17 @@ class NodeForm(TreeForm):
 
 class PageAdminForm(NodeForm):
        class Meta:
-               model=Page
+               model = Page
 
 
 class RedirectAdminForm(NodeForm):
        class Meta:
-               model=Redirect
+               model = Redirect
 
 
 class FileAdminForm(NodeForm):
        class Meta:
-               model=File
-
-
-class NodeAdmin(EntityAdmin):
-       pass
+               model = File
 
 
 class RedirectAdmin(NodeAdmin):
@@ -168,7 +147,7 @@ class RedirectAdmin(NodeAdmin):
                        'fields': ('slug', 'target', 'status_code')
                }),
                ('URL/Tree/Hierarchy', {
-                       'classes': ('collapse', 'collapse-closed'),
+                       'classes': COLLAPSE_CLASSES,
                        'fields': ('parent',)
                }),
        )
@@ -184,7 +163,7 @@ class FileAdmin(NodeAdmin):
                        'fields': ('file', 'slug', 'mimetype')
                }),
                ('URL/Tree/Hierarchy', {
-                       'classes': ('collapse', 'collapse-closed'),
+                       'classes': COLLAPSE_CLASSES,
                        'fields': ('parent',)
                }),
        )
@@ -200,7 +179,7 @@ class PageAdmin(NodeAdmin):
                        'fields': ('title', 'slug', 'template')
                }),
                ('URL/Tree/Hierarchy', {
-                       'classes': ('collapse', 'collapse-closed'),
+                       'classes': COLLAPSE_CLASSES,
                        'fields': ('parent',)
                }),
        )
@@ -249,7 +228,7 @@ class PageAdmin(NodeAdmin):
                                initial_content = None
                                try:
                                        initial_content = page.contentreferences.get(name__exact=container_name, content_type=container_content_type).content.pk
-                               except ContentReference.DoesNotExist:
+                               except (ContentReference.DoesNotExist, AttributeError):
                                        pass
                                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
@@ -270,12 +249,41 @@ class PageAdmin(NodeAdmin):
                for container_name, container_content_type in contentreference_containers:
                        if ('contentreference_container_%s' % container_name) in form.cleaned_data:
                                content = form.cleaned_data[('contentreference_container_%s' % container_name)]
+                               try:
+                                       contentreference = page.contentreferences.get(name=container_name)
+                               except ContentReference.DoesNotExist:
+                                       contentreference = ContentReference(name=container_name, page=page, content_type=container_content_type)
+                               
                                if content == None:
-                                       continue
-                               contentreference, created = page.contentreferences.get_or_create(name=container_name, defaults={'content': content})
-                               if not created:
-                                       contentreference.content = content
-                                       contentreference.save()
+                                       contentreference.content_id = None
+                               else:
+                                       contentreference.content_id = content.id
+                               
+                               contentreference.save()
+
+
+class TemplateAdmin(admin.ModelAdmin):
+       prepopulated_fields = {'slug': ('name',)}
+       fieldsets = (
+               (None, {
+                       'fields': ('parent', 'name', 'slug')
+               }),
+               ('Documentation', {
+                       'classes': COLLAPSE_CLASSES,
+                       'fields': ('documentation',)
+               }),
+               (None, {
+                       'fields': ('code',)
+               }),
+               ('Advanced', {
+                       'classes': COLLAPSE_CLASSES,
+                       'fields': ('mimetype',)
+               }),
+       )
+       save_on_top = True
+       save_as = True
+       list_display = ('__unicode__', 'slug', 'get_path',)
+       form = TreeForm
 
 
 admin.site.register(Collection, CollectionAdmin)