2011-10-09 117 views
0

我从一过,我想填补它会自动根据来自数据库的信息,并填写字段:web2py会自动填充/自动完成返回ID

在db_wizard.py

db.define_table('receiver', 
    Field('name'), # e.g. Daniel 
    Field('email'),# e.g. [email protected] 
    Field('opening'), # e.g. Dear Daniel 
    ...)   

db.define_table('sender', 
    Field('name'), # e.g. John 
    Field('email'), # e.g. [email protected] 
    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

回答

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” 将阻止它

0

我不认为你想使用suggest_widget(或内置的自动填充小部件)。相反,只要用户选择一个接收器,就希望动态填充“开放”字段。为此,您可能需要修改版本的lazy_options_widget(不与suggest_widget结合使用)。

另外,请注意,使用id_field与'打开'字段将不适合,因为它不是一个引用字段(所以没有关联的id引用)。