plone / plone.autoform

plone.autoform builds custom z3c.form forms based on a model (schema) of what fields to include and what widgets and options should be used for each field.
https://pypi.org/project/plone.autoform
4 stars 5 forks source link

changing mode of field in other different behavior #37

Open iham opened 6 years ago

iham commented 6 years ago

how do i hide a field, thats not inside my behavior?

class IFancyDescriptionBehavior(model.Schema):
    fancydescription = RichText(...)
    directives.mode(description='hidden')

this does not work, as "description" is not a variable inside my behavior. plonistas know: the description is delivered by the IBasic behavior (even more correct: by IDublinCore)

i know, i can:

... to ALL types! and i loose the idublincore interface on all types. which (maybe?) can lead to problems beyond my knowledge and reach.

well. thats a little much to ask for, just to simply hide a field, when my behavior is applied.

i have seen monkeypatches, subclassing and simple css as a solution, but all of them break instead of modify the system.

i'd like to see a simple solution like

directives.mode(mode='hidden', field='IBasic.fieldname')
or
directives.mode(mode='hidden', interface=IBasic, field='fieldname')
or
directives.mode(**{'IBasic.fieldname': 'hidden'})
or something like that

sadly i don't have the knowlege and time to do it on my own.

jensens commented 6 years ago

By design a behavior is not meant to change or interfere with other behavior, just because it is applied.

You can change a behavior on a global level, so it behaves consistently different. But in this case be sure all still works.

If IBasic does not do what you want, you need an own behavior providing a title and description (or no description at all).

And well, IDublinCore or plone.dublincore was in my opinion a mistake. It is just a collection of behaviors. I would really like to see it disappear and have the behaviors applied it consists of. It has no real value, but it makes code more complex, sometimes. Also, afaik, in code outside tests it is rarely referenced.

So, sorry, but I am -1 to add a feature like this.