hi, at the Demo plone.formwidget.masterselect/src/plone/formwidget/masterselect/demo.py at master · collective/plone.formwidget.masterselect · GitHub
i see master and slave field have only simple list of values.
I need to have select fields with value and title so I tried this:
@implementer(IContextSourceBinder)
class get_lifesit_cat(object):
def __call__(self, context):
return SimpleVocabulary(
[
SimpleTerm(value='platinum', title='Platinum Sponsor'),
SimpleTerm(value='gold', title='Gold Sponsor'),
]
)
def getSlaveVocab(master):
if master == 'platinum':
return SimpleVocabulary(
[
SimpleTerm(value='platinum 1', title='Platinum Sponsor 1'),
SimpleTerm(value='platinum 2', title='Platinum Sponsor 2'),
]
)
elif master == 'gold':
return SimpleVocabulary(
[
SimpleTerm(value='gold 1', title='Gold Sponsor 1'),
SimpleTerm(value='gold 2', title='Gold Sponsor 2'),
]
)
return SimpleVocabulary([])
#test MasterField
class ILifeSituationHelper(model.Schema):
"""LifeSituationHelper"""
#master
directives.write_permission(lifesit_categories='cmf.ModifyPortalContent')
directives.widget(lifesit_categories=SelectFieldWidget)
lifesit_categories = MasterSelectField(
title=_(u'Category'),
description=u'',
source=get_lifesit_cat(),
required=True,
slave_fields=(
# Controls the vocab of slaveField1
{'name': 'life_sit',
'action': 'vocabulary',
'vocab_method': getSlaveVocab,
'control_param': 'master',
},
),
)
#slave
directives.write_permission(life_sit='cmf.ModifyPortalContent')
directives.widget(life_sit=SelectFieldWidget)
life_sit = schema.Choice(
title=_(u'Situation'),
description=u'',
values=['will', 'be', 'replaced'],
#source=dummy_ls(),
required=True,
)
but when you select 'gold' in master field the slave keeps unchange 
- any idea with this package plone.formwidget.masterselect?
I also tried with Ajax.
Ajax set options of slave field correctly, but as my slave field is schema.choice,
Plone requeries setting of 'values' or 'source' of slave field definition,
so when Ajax sets new values for slave field, @@z3cform_validate_field is called
it say slave field has not value from 'values' or 'source'
eggs/zope.schema-6.2.0-py3.8.egg/zope/schema/vocabulary.py", line 203, in getTermByToken
raise LookupError(token)
LookupError: platinumGreen
- I dont know how to overwrite z3cform_validate_field

Many thanks for your time.