File should be a value model, right?
[philo.git] / philo / admin / nodes.py
1 from django.contrib import admin
2 from mptt.admin import MPTTModelAdmin
3
4 from philo.admin.base import EntityAdmin, TreeEntityAdmin, COLLAPSE_CLASSES
5 from philo.models import Node, Redirect, File
6
7
8 class NodeAdmin(TreeEntityAdmin):
9         list_display = ('slug', 'view', 'accepts_subpath')
10         raw_id_fields = ('parent',)
11         related_lookup_fields = {
12                 'fk': raw_id_fields,
13                 'm2m': [],
14                 'generic': [['view_content_type', 'view_object_id']]
15         }
16         
17         def accepts_subpath(self, obj):
18                 return obj.accepts_subpath
19         accepts_subpath.boolean = True
20         
21         def formfield_for_foreignkey(self, db_field, request, **kwargs):
22                 return super(MPTTModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
23
24
25 class ViewAdmin(EntityAdmin):
26         pass
27
28
29 class RedirectAdmin(ViewAdmin):
30         fieldsets = (
31                 (None, {
32                         'fields': ('target_node', 'url_or_subpath', 'status_code')
33                 }),
34                 ('Advanced', {
35                         'fields': ('reversing_parameters',),
36                         'classes': COLLAPSE_CLASSES
37                 })
38         )
39         list_display = ('target_url', 'status_code', 'target_node', 'url_or_subpath')
40         list_filter = ('status_code',)
41         raw_id_fields = ['target_node']
42         related_lookup_fields = {
43                 'fk': raw_id_fields
44         }
45
46
47 class FileAdmin(ViewAdmin):
48         fieldsets = (
49                 (None, {
50                         'fields': ('name', 'file', 'mimetype')
51                 }),
52         )
53         list_display = ('name', 'mimetype', 'file')
54         search_fields = ('name',)
55         list_filter = ('mimetype',)
56
57
58 admin.site.register(Node, NodeAdmin)
59 admin.site.register(Redirect, RedirectAdmin)
60 admin.site.register(File, FileAdmin)