diff --git a/asyncron/base/admin.py b/asyncron/base/admin.py index 0b0460c..c2bbc6a 100644 --- a/asyncron/base/admin.py +++ b/asyncron/base/admin.py @@ -1,48 +1,44 @@ from django.contrib import admin, messages -from django.utils.safestring import mark_safe -from django.utils.html import escape +from django.template import loader +from django.forms.fields import JSONField + +from ..widgets import Codearea + import traceback class BaseModelAdmin( admin.ModelAdmin ): + def formfield_for_dbfield( self, db_field, **kwargs ): + formfield = super().formfield_for_dbfield(db_field, **kwargs) + if isinstance( formfield, JSONField ): + formfield.widget = Codearea( language = "json" ) + return formfield + def explain_gather_results( self, request, results, fails_to_show = 2 ): failed = 0 for id, e in results.items(): if isinstance(e, BaseException): failed += 1 if failed <= fails_to_show: + + traceback_message = None if request.user.is_superuser: traceback_message = ''.join(traceback.TracebackException.from_exception(e).format()) - self.message_user( request, mark_safe(f""" - Error For {id}: - -
{escape(e)}
-
- {escape(traceback_message)}
- """), messages.ERROR
- )
- else: self.message_user( request, f"Error For {id}: {escape(e)}", messages.ERROR)
+ #NOT sure if there is a clean way to get the model
+ #object_change_url = reverse(
+ # f'admin:{self._meta.model_name}_{self._meta.app_label}_change',
+ # kwargs={'object_id': self.pk}
+ #)
+
+ self.message_user(
+ request,
+ loader.get_template("asyncron/admin-gather-error-message.html").render({
+ "id": id, "e": e,
+ "traceback_message": traceback_message
+ }),
+ messages.ERROR
+ )
if failed == 0: self.message_user( request, f"All {len(results)} Succeeded!", messages.SUCCESS )
elif failed <= fails_to_show:
diff --git a/asyncron/templates/asyncron/admin-gather-error-message.html b/asyncron/templates/asyncron/admin-gather-error-message.html
new file mode 100644
index 0000000..8b26bdd
--- /dev/null
+++ b/asyncron/templates/asyncron/admin-gather-error-message.html
@@ -0,0 +1,31 @@
+{% autoescape on %}
+ Error For Object {{ id }}:
+ {% if traceback_message %}
+
+ {{ e }}
+
+ {{ traceback_message }}
+ {% endif %}
+{% endautoescape %}
diff --git a/asyncron/templates/asyncron/codearea-widget.html b/asyncron/templates/asyncron/codearea-widget.html
new file mode 100644
index 0000000..6c1f0fa
--- /dev/null
+++ b/asyncron/templates/asyncron/codearea-widget.html
@@ -0,0 +1,56 @@
+{% load static %}
+
+
+
+
+{{ value }}
+