diff --git a/src/wuttaweb/forms/schema.py b/src/wuttaweb/forms/schema.py
index e4c3703..b3f0105 100644
--- a/src/wuttaweb/forms/schema.py
+++ b/src/wuttaweb/forms/schema.py
@@ -155,6 +155,37 @@ class WuttaEnum(colander.Enum):
return widgets.SelectWidget(**kwargs)
+class WuttaDictEnum(colander.String):
+ """
+ Schema type for "pseudo-enum" fields which reference a dict for
+ known values instead of a true enum class.
+
+ This is primarily for use with "status" fields such as
+ :attr:`~wuttjamaican:wuttjamaican.db.model.batch.BatchRowMixin.status_code`.
+
+ This is a subclass of :class:`colander.String`, but adds a default
+ widget (``SelectWidget``) with enum choices.
+
+ :param request: Current :term:`request` object.
+
+ :param enum_dct: Dict with possible enum values and labels.
+ """
+
+ def __init__(self, request, enum_dct, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.request = request
+ self.config = self.request.wutta_config
+ self.app = self.config.get_app()
+ self.enum_dct = enum_dct
+
+ def widget_maker(self, **kwargs):
+ """ """
+ if 'values' not in kwargs:
+ kwargs['values'] = [(k, v) for k, v in self.enum_dct.items()]
+
+ return widgets.SelectWidget(**kwargs)
+
+
class WuttaMoney(colander.Money):
"""
Custom schema type for "money" fields.
diff --git a/src/wuttaweb/templates/configure.mako b/src/wuttaweb/templates/configure.mako
index 63ba963..e5d841a 100644
--- a/src/wuttaweb/templates/configure.mako
+++ b/src/wuttaweb/templates/configure.mako
@@ -18,7 +18,7 @@
${self.buttons_content()}
- ${h.form(request.current_route_url(), enctype='multipart/form-data', ref='saveSettingsForm', **{'@submit': 'saveSettingsFormSubmit'})}
+ ${h.form(request.url, enctype='multipart/form-data', ref='saveSettingsForm', **{'@submit': 'saveSettingsFormSubmit'})}
${h.csrf_token(request)}