首页 文章

Web2py:表示引用字段时行不正确

提问于
浏览
0

我很少发现一个尚未回答的问题,但我已经搜索了3天并且还没有找到任何东西 .

我'm aiming to create a page for inputing records in a '电子表格' like format. I'已在this slice的SQLFORM.grid中使用内联编辑 .

我遇到的问题是,当其中一个字段是对另一个表的引用时,在lambda函数中使用的行将获取引用表的行而不是网格中的行 .

这是一个例子: Model

db.define_table('people',
            Field('name', 'string'),
            format = '%(name)s',
            )

db.define_table('animals',
            Field('name', 'string'),
            Field('pet_owner', 'reference people'),
            format = '%(name)s',
            )

Controller

def index():
    #process submitted form
    if len(request.post_vars) > 0:
        print request.post_vars
        for key, value in request.post_vars.iteritems():
            (field_name,sep,row_id) = key.partition('_row_')
            if row_id:
                db(db.animals.id == row_id).update(**{field_name:value})

    db.animals.name.represent = lambda value,row:  SQLFORM.widgets.string.widget(db.animals.pet_owner,value, **{'_name':'name_row_%s' % row.id})

    db.animals.pet_owner.represent = lambda value,row:  SQLFORM.widgets.options.widget(db.animals.pet_owner,value, **{'_name':'pet_owner_row_%s' % row.id})

    grid = SQLFORM.grid(db.animals,
                        selectable= lambda ids : redirect(URL('animals',vars=request._get_vars)),
                        )
    grid.elements(_type='checkbox',_name='records',replace=None)  #remove selectable's checkboxes
    return dict(grid=grid)

首先看起来网格正常工作 . 但是,在检查参考字段的下拉列表时,如果两个连续的行具有相同的值(例如,具有相同所有者的两个动物),则在名称(pet_owner_row_1)中使用相同的行,这意味着将值传递给进程提交的表单不是整数(例如3),而是由管道分隔的整数(例如“| 3 | 3 |”) .

我已经确认这是问题所在,方法是将代表更改为db.animals.pet_owner.represent = lambda值,row:row,显示不同动物的完全相同的行数据 .

以下是在表单项上显示检查器的图像:http://i.stack.imgur.com/oFtF8.png

如何获取网格行的行ID而不是引用的id?

任何帮助是极大的赞赏!

1 回答

  • 1

    这是最近在主分支中的fixed但尚未发布的错误 . 与此同时,解决方法是暂时将字段更改为整数类型:

    db.animals.pet_owner.type = 'integer'
    db.animals.pet_owner.represent = lambda value,row: SQLFORM.widgets.options.widget(
        db.animals.pet_owner,value, **{'_name':'pet_owner_row_%s' % row.id})
    

相关问题