admin.py 3.6 KB
Newer Older
David Haynes's avatar
David Haynes committed
1
2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
3
"""
4
5
api/admin.py

6
7
8
9
Django admin interface configuration.

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/
"""
10
# Django Imports
11
from django.contrib import admin
David Haynes's avatar
David Haynes committed
12
from django.contrib.gis.admin import OSMGeoAdmin
13
# App Imports
David Haynes's avatar
David Haynes committed
14
from .models import Facility, Schedule, OpenTime, Category, Location, Alert
15

David Haynes's avatar
David Haynes committed
16
@admin.register(Facility)
Ben Waters's avatar
Ben Waters committed
17
class FacilityAdmin(admin.ModelAdmin):
18
    """
David Haynes's avatar
David Haynes committed
19
20
21
    Custom Admin panel for the Facility model.

    Allows admins to create new facilities through the admin interface.
22
    """
David Haynes's avatar
David Haynes committed
23
    # Allow filtering by the following fields
David Haynes's avatar
David Haynes committed
24
    list_filter = ['facility_category', 'facility_location']
David Haynes's avatar
David Haynes committed
25
26
    # Modify the rendered layout of the "create a new facility" page
    # We are basically reordering things to look nicer to the user here
27
28
    fieldsets = (
        (None, {
David Haynes's avatar
David Haynes committed
29
30
31
32
33
            'fields': ('facility_name', 'logo', 'facility_category',
                       'facility_location', 'main_schedule', 'special_schedules',
                       ('facility_product_tags', 'facility_labels',
                        'facility_classifier'),
                       'tapingo_url', 'phone_number', 'note', 'owners'),
34
        }),
35
    )
36
37
    autocomplete_fields = ['main_schedule', 'special_schedules', ]

38

39
40
41
42
43
44
45
46
    # despite the name of this method, ("change" seems to imply it would affect modify)
    # it is called only when initially creating a model
    def get_changeform_initial_data(self, request):
        initial_data = super(FacilityAdmin, self).get_changeform_initial_data(request)
        initial_data['owners'] = [request.user, ]
        return initial_data


47
48
49
50
51
52
53
54
55
56
class OpenTimeInline(admin.TabularInline):
    """
    A table of time periods that represent an "open time" for a Facility.

    https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.TabularInline
    """
    # Columns correspond to each attribute in the OpenTime table
    model = OpenTime
    # 7 days of the week, so only have 7 rows
    max_num = 7
57
58
59
60
61
62
63
64
65
66
    extra = 7
    # We are basically reordering things to look nicer to the user here
    fieldsets = (
        (None, {
            'fields': (
                ('start_day', 'start_time'),
                ('end_day', 'end_time')
            ),
        }),
    )
67

David Haynes's avatar
David Haynes committed
68
@admin.register(Schedule)
69
class ScheduleAdmin(admin.ModelAdmin):
70
    """
David Haynes's avatar
David Haynes committed
71
72
73
74
75
    Custom Admin panel for the Schedule model.

    Allows admins to create new schedules through the admin interface.
    Additionally, we append the OpenTimeInline table to allow for open times to
    be defined for the schedule we are creating.
76
    """
David Haynes's avatar
David Haynes committed
77
    # Allow filtering by the following fields
78
    list_display = ['name', 'modified']
David Haynes's avatar
David Haynes committed
79
    # Append the OpenTimeInline table to the end of our admin panel
80
    inlines = [OpenTimeInline, ]
David Haynes's avatar
David Haynes committed
81
    # Modify the rendered layout of the "create a new facility" page
82
83
    fieldsets = (
        (None, {
84
85
86
            'fields': ('name',
                       # Pair valid_start and valid_end together on the same
                       # line
David Haynes's avatar
David Haynes committed
87
                       ('valid_start', 'valid_end'),
88
                       'twenty_four_hours',
89
90
                       'schedule_for_removal',
                       'promote_to_main')
David Haynes's avatar
David Haynes committed
91
        }),
92
    )
93
94
    search_fields = ['name', ]  # search terms for autcomplete
    ordering = ['name', ]  # autocomplete ordering
95

David Haynes's avatar
David Haynes committed
96
# https://docs.djangoproject.com/en/1.11/ref/contrib/gis/admin/#osmgeoadmin
97
98
99
OSMGeoAdmin.default_lon = -8605757.16502
OSMGeoAdmin.default_lat = 4697457.00333
OSMGeoAdmin.default_zoom = 15
David Haynes's avatar
David Haynes committed
100
admin.site.register(Location, OSMGeoAdmin)
101
102
# Use the default ModelAdmin interface for these
admin.site.register(Category)
David Haynes's avatar
David Haynes committed
103
admin.site.register(Alert)