From 111caf86a555c3e01389fd3b0fb2d3668086b31b Mon Sep 17 00:00:00 2001 From: Alejandro Giacometti Date: Fri, 19 Dec 2014 15:03:30 +0000 Subject: [PATCH] FieldPanel to accept custom widgets FieldPanel accepts a widget argument which will override the default widget for this field (torchbox/wagtail#848) --- wagtail/wagtailadmin/edit_handlers.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index e2ce14c35c..7e457be2fd 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -351,6 +351,15 @@ def MultiFieldPanel(children, heading="", classname=""): class BaseFieldPanel(EditHandler): + + @classmethod + def widget_overrides(cls): + """check if a specific widget has been defined for this field""" + if hasattr(cls, 'widget'): + return {cls.field_name: cls.widget} + else: + return {} + def __init__(self, instance=None, form=None): super(BaseFieldPanel, self).__init__(instance=instance, form=form) self.bound_field = self.form[self.field_name] @@ -397,11 +406,16 @@ class BaseFieldPanel(EditHandler): return [self.field_name] -def FieldPanel(field_name, classname=""): - return type(str('_FieldPanel'), (BaseFieldPanel,), { +def FieldPanel(field_name, classname="", widget=None): + base = { 'field_name': field_name, 'classname': classname, - }) + } + + if widget: + base['widget'] = widget + + return type(str('_FieldPanel'), (BaseFieldPanel,), base) class BaseRichTextFieldPanel(BaseFieldPanel):