0

我有一个来自,我想根据数据库中的信息和填充字段自动填充它:

在 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所选记录的!而不是我们真正投入的“开放”,就像上面的例子:它返回1而不是Dear Daniel

4

2 回答 2

0

我认为您不想使用Suggest_widget(或内置的自动完成小部件)。相反,您希望在用户选择接收方后立即动态填写“开放”字段。为此,您可能需要修改版的lazy_options_widget(不与suggest_widget 一起使用)。

另外,请注意,使用带有 'opening' 字段的 id_field 无论如何都不合适,因为它不是参考字段(因此没有关联的 id 可以参考)。

于 2011-10-10T00:18:35.120 回答
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”会阻止它

于 2011-10-17T21:31:29.777 回答