1

How can you determine the methods and attributes of objects in PloneFormGen? I want to write some scripts for a custom field adapter and would like to know what is available. My immediate problem comes from some online code I copied from: Python script to hide ploneformgen form after user has filled it out. (For Plone-4.3.2-64.)

alreadyInDB = False
savedData = ploneformgen.savefield.getSavedFormInputForEdit()
username = request.AUTHENTICATED_USER.getId()
return {'username': 'No way man!'}
usersInDB = [x.split(',')[1] for x in savedData.split('\r\n') if len(x)>0]

if username in usersInDB:
    alreadyInDB = True

if alreadyInDB:
    return {'username': 'No way man!'}

This is the error message I get.

AttributeError: savefield

What I want to do is see what is available for attributes and methods and either fix this or write my own. Any help is appreciated.

This is what we use: PloneFormGen 1.7.12 Products.PFGExtendedMailAdapter 2.4

Plone 4.3.3 (4308) CMF 2.2.7 Zope 2.13.22 Python 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] PIL 2.0.0 (Pillow)

4

3 回答 3

1

PloneFormGen 对 TTW 脚本使用受限的 Python。您可以在对象上使用 dir() 或 vars() 来了解它们提供的内容。要看到这一点,您可能想要打印它们。

TTW 脚本不太适合内隐。也许看看相关代码或使用调试模式来获取表单并使用上面的相同方法使用真正的调试器来查看发生了什么。

./bin/instance debug 然后您将拥有数据库的根对象为“app”。

获取您的表格可以像这样简单:

myform = app.unrestrictedTraverse('Plone/my-form')

获取所有表单字段对象(子项):

myform.objectItems()

获取特定字段(包括数据保存适配器对象):

myform.objectIds()
myform['adapter-id']

祝你好运 ;)

于 2019-03-19T11:26:25.287 回答
0

调用dir()一个对象以返回它拥有的所有可用方法和属性的列表。

或者,inspect.getsource()在函数、类、类方法或类属性上使用以返回与其关联的源代码。

使用 pandas DataFrame 对象的示例:

>>> from inspect import getsource
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> dir(df)
    # returns methods and attributes of df
    # which is an instance of a DataFrame object
>>> getsource(pd.DataFrame.head)
    # returns source code for head attribute
    # of a DataFrame object

请注意,getsource需要访问实际类的属性/方法(在本例中pd.DataFrame)而不是该类的实例(df在本例中)。因此,您可以dir先使用来找出方法/属性,然后再getsource使用特定的方法/属性来查看代码。

于 2019-03-15T14:50:22.687 回答
0

在代码示例ploneformgen中是可用的上下文变量,表示表单文件夹对象并savefield表示位于表单文件夹中的保存数据适配器的 ID。

您需要添加一个名为 的保存数据适配器savefield,或者如果已经存在,则相应地更改脚本中的 ID。

于 2019-03-31T11:58:06.540 回答