如何在特定欄位下新增(add)或移除(remove)

form.mode(var='hidden')沒有真的讓var欄位被忽略(omit), form.omitted('var')無法讓var欄位在特定條件下被忽略,那麼該怎麼做呢?

plone.z3cform.fieldsets.utils 中,提供了add, remove, move 這三種function

使用 custom add/edit form 的技巧,如下:

from plone.z3cform.fieldsets.utils import add, remove
...
def updateWidgets(self):
    if some_condition:
        remove(self, 'field_name')
    super(CustomEditForm, self).updateWidgets()

這樣就能使filed在特定條件下,忽略(omit)該欄位,而不只是隱藏(hidden).

如果是要新增(add),則還需要指定schema, 所以

from zope import schema
field = schema(__name__='fieldName', title=_(u'Field name'),)
add(self, field, group='label name', index=2)

說明:

field必需指定欄位名稱,所以必需設定 __name__,但如果直接import 某個 Interface 之中已設定好的,就可以不用指定 __name__。

group是fieldset的名稱,如果在表單中有找到,就直接用,沒找到就會開新的fieldset。

index是整數,指要插入在該fieldset的那一個位置,0是最前面,沒設定或大於fieldset的數量,就放最後面。