web2py 自动填充/自动完成返回 ID
我有一个表单,我想根据数据库里的信息和已填写的字段自动填充它:
在 db_wizard.py 文件中
db.define_table('receiver',
Field('name'), # e.g. Daniel
Field('email'),# e.g. daniel@daniel.com
Field('opening'), # e.g. Dear Daniel
...)
db.define_table('sender',
Field('name'), # e.g. John
Field('email'), # e.g. John@john.com
Field('tel'), # e.g. 111 222 111
...)
db.define_table('letter',
Field('sender', db.sender.id), # e.g. Daniel
Field('receiver', db.receiver.id), # e.g. John
Field('opening'), # should be filled automatically when choosing/changing the value of "receiver"
...)
我使用了 plugin_lazy_widget
db.letter.opening.widget = suggest_widget(db.receiver.opening, id_field=db.i2l_receiver_profile.id,
limitby=(0,10), min_length=1, db=db(db.i2l_receiver_profile.user_id==auth.user_id))
但是这个小部件,或者说 web2py_autocomplete_widget,总是返回所选记录的 ID
!而不是我们在“opening”里实际输入的内容,比如上面的例子:它返回 1
,而不是 亲爱的丹尼尔
2 个回答
0
我觉得你不需要使用suggest_widget(或者内置的自动完成小部件)。相反,你想要的是在用户选择接收者后,'opening'字段能够自动填充。为此,你可能需要一个修改过的lazy_options_widget(而不是和suggest_widget一起使用)。
另外,注意使用id_field和'opening'字段结合也不合适,因为它不是一个引用字段(所以没有相关的id可以引用)。
0
换句话说:
db.letter.opening.widget = suggest_widget(db.receiver.opening, id_field=db.i2l_receiver_profile.id,
limitby=(0,10), min_length=1, db=db(db.i2l_receiver_profile.user_id==auth.user_id))
可以使用:
db.letter.opening.widget = suggest_widget(db.receiver.opening,
limitby=(0,10), min_length=1, db=db(db.i2l_receiver_profile.user_id==auth.user_id))
这意味着如果不定义 "id_field
",就会阻止它的使用。