diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dc858b57..ddc6bf21c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- Made some fields read only in the Django admin to prevent slow page loads resulting in service interruptions. [#527](https://github.com/open-apparel-registry/open-apparel-registry/pull/527) + ### Security diff --git a/src/django/api/admin.py b/src/django/api/admin.py index 2807c0e6e..0db46327f 100644 --- a/src/django/api/admin.py +++ b/src/django/api/admin.py @@ -1,5 +1,8 @@ +import json + from django.contrib import admin from django.contrib.auth.admin import UserAdmin +from django.utils.safestring import mark_safe from simple_history.admin import SimpleHistoryAdmin from api import models @@ -15,12 +18,44 @@ class OarUserAdmin(UserAdmin): class FacilityHistoryAdmin(SimpleHistoryAdmin): - history_list_display = ['name', 'address', 'location'] + history_list_display = ('name', 'address', 'location') + + readonly_fields = ('created_from',) + + +class FacilityListItemAdmin(admin.ModelAdmin): + exclude = ('processing_results',) + readonly_fields = ('facility_list', 'facility', + 'pretty_processing_results') + + def pretty_processing_results(self, instance): + # The processing_results field is populated exclusively from processing + # code so we are not in danger of rendering potentially unsafe user + # submitted content + return mark_safe('
{}
'.format( + json.dumps(instance.processing_results, indent=2))) + + pretty_processing_results.short_description = 'Processing results' + + +class FacilityMatchAdmin(admin.ModelAdmin): + exclude = ('results',) + readonly_fields = ('facility_list_item', 'facility', + 'confidence', 'status', 'pretty_results') + + def pretty_results(self, instance): + # The status field is populated exclusively from processing code so we + # are not in danger of rendering potentially unsafe user submitted + # content + return mark_safe('
{}
'.format( + json.dumps(instance.results, indent=2))) + + pretty_results.short_description = 'Results' admin.site.register(models.User, OarUserAdmin) admin.site.register(models.Contributor) admin.site.register(models.FacilityList) -admin.site.register(models.FacilityListItem) +admin.site.register(models.FacilityListItem, FacilityListItemAdmin) admin.site.register(models.Facility, FacilityHistoryAdmin) -admin.site.register(models.FacilityMatch) +admin.site.register(models.FacilityMatch, FacilityMatchAdmin)