web2py自动填充/自动填充返回ID

时间:2011-10-09 12:02:52

标签: python ajax autocomplete web2py autofill

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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”会阻止它