from django import forms from django.contrib import admin from django.contrib.auth.models import User # EP from django.conf import settings from common.models import * # EP added class ReadOnlyModelAdmin(admin.ModelAdmin): """ModelAdmin class that prevents modifications through the admin. The changelist and the detail view work, but a 403 is returned if one actually tries to edit an object. Source: https://gist.github.com/aaugustin/1388243 """ actions = None def get_readonly_fields(self, request, obj=None): return self.fields or [f.name for f in self.model._meta.fields] def has_add_permission(self, request): return False # Allow viewing objects but not actually changing them def has_change_permission(self, request, obj=None): if request.method not in ('GET', 'HEAD'): return False return super(ReadOnlyModelAdmin, self).has_change_permission(request, obj) def has_delete_permission(self, request, obj=None): return False # EP added # Edit mode # DEBUG = False # View only mode # DEBUG = True ''' Uncomment for production ''' # if settings.DEBUG: # class PyrosModelAdmin(ReadOnlyModelAdmin): # pass # else: # class PyrosModelAdmin(admin.ModelAdmin): # pass class PyrosModelAdmin(admin.ModelAdmin): pass # Many To Many interface adapter class PyrosUserAndSPInline(admin.TabularInline): model = ScientificProgram.pyros_users.through class SequenceAndScheduleInline(admin.TabularInline): model = Schedule.sequences.through class ScheduleAdmin(admin.ModelAdmin): inlines = [ SequenceAndScheduleInline, ] exclude = ('sequences',) # One To Many interface adapters class SequenceInline(admin.TabularInline): model = Sequence readonly_fields = ("name",) fields = ("name",) show_change_link = True class RequestInline(admin.TabularInline): model = Request readonly_fields = ("name",) fields = ("name",) show_change_link = True class AlbumInline(admin.TabularInline): model = Album readonly_fields = ("name",) fields = ("name",) show_change_link = True class PlanInline(admin.TabularInline): model = Plan readonly_fields = ("name",) fields = ("name",) show_change_link = True class ImageInline(admin.TabularInline): model = Image readonly_fields = ("name",) fields = ("name",) show_change_link = True class DetectorInline(admin.TabularInline): model = Detector readonly_fields = ("device_name",) fields = ("device_name",) show_change_link = True class PyrosUserInline(admin.TabularInline): model = PyrosUser readonly_fields = ("user_username",) fields = ("user_username",) show_change_link = True class FilterInline(admin.TabularInline): model = Filter readonly_fields = ("device_name",) fields = ("device_name",) show_change_link = True class AlertInline(admin.TabularInline): model = Alert readonly_fields = ("request_name",) fields = ("request_name",) show_change_link = True # Admin model classes class RequestAdmin(PyrosModelAdmin): inlines = [ SequenceInline, ] class SequenceAdmin(PyrosModelAdmin): inlines = [ AlbumInline, SequenceAndScheduleInline, # for M2M interface ] class PyrosUserAdmin(PyrosModelAdmin): inlines = [ RequestInline, # A user has many SPs PyrosUserAndSPInline, # for M2M interface ] class StrategyObsAdmin(PyrosModelAdmin): inlines = [ AlertInline, ] class ScientificProgramAdmin(PyrosModelAdmin): inlines = [ RequestInline, # A SP has many users: PyrosUserAndSPInline, # for M2M interface ] exclude = ('pyros_users',) # for M2M interface class CountryAdmin(PyrosModelAdmin): inlines = [ PyrosUserInline, ] class UserLevelAdmin(PyrosModelAdmin): inlines = [ PyrosUserInline, ] class FilterAdmin(PyrosModelAdmin): inlines = [ PlanInline, ] class FilterWheelAdmin(PyrosModelAdmin): inlines = [ FilterInline, ] class NrtAnalysisAdmin(PyrosModelAdmin): inlines = [ ImageInline, ] class DetectorAdmin(PyrosModelAdmin): inlines = [ AlbumInline, ] class TelescopeAdmin(PyrosModelAdmin): inlines = [ DetectorInline, ] class PlanAdmin(PyrosModelAdmin): inlines = [ ImageInline, ] # class AlbumAdmin(admin.ModelAdmin): class AlbumAdmin(PyrosModelAdmin): inlines = [ PlanInline, ] # Link the models to the admin interface admin.site.register(Album, AlbumAdmin) admin.site.register(Alert) admin.site.register(Country, CountryAdmin) admin.site.register(Detector, DetectorAdmin) admin.site.register(Filter, FilterAdmin) admin.site.register(FilterWheel, FilterWheelAdmin) admin.site.register(Image) admin.site.register(Log) admin.site.register(NrtAnalysis, NrtAnalysisAdmin) admin.site.register(Plan, PlanAdmin) admin.site.register(Request, RequestAdmin) admin.site.register(Schedule, ScheduleAdmin) admin.site.register(ScheduleHasSequences) admin.site.register(ScientificProgram, ScientificProgramAdmin) admin.site.register(Sequence, SequenceAdmin) admin.site.register(SiteWatch) admin.site.register(SiteWatchHistory) admin.site.register(StrategyObs, StrategyObsAdmin) admin.site.register(TaskId) admin.site.register(Telescope, TelescopeAdmin) admin.site.register(PyrosUser, PyrosUserAdmin) admin.site.register(UserLevel, UserLevelAdmin) admin.site.register(Version) admin.site.register(WeatherWatch) admin.site.register(WeatherWatchHistory) admin.site.register(PlcDeviceStatus) admin.site.register(PlcDevice) admin.site.register(Config)