首页 文章

在web2py中复制记录及其引用

提问于
浏览
0

在我的web2py应用程序中,我需要复制记录及其所有引用 . 例如,一个用户有一个产品(sponserid是用户) . 而且这个产品有很多功能存储在其他表中(参考产品ID) .

我的要求是,如果另一个用户正在复制此产品,则会在产品表中生成一条新记录,其中包含新的productid和新的sponserid . 并且所有参考表记录也将与新产品ID重复 . 实际上,在所有表中创建重复条目,只有更改是产品ID和sponserid .

产品表字段将更改 . 所以我必须写一个动态查询 .

如果我可以编写如下代码

product = db(db.tbl_product.id==productid).select(db.tbl_product.ALL).first()
newproduct = db.tbl_product.insert(sponserid=newsponserid)
for field,value in product.iteritems():
    if field!='sponserid':
        db(db.tbl_product.id==newproduct).update(field=value)

但我不能在更新功能中引用这样的字段名称 .

此外,我想知道是否还有其他更好的逻辑来实现这一要求 . 我非常感谢任何建议 .

1 回答

  • 3

    对于在字段名称存储在变量中时使用 .update() 方法的特定问题,您可以执行以下操作:

    db(db.tbl_product.id==newproduct).update(**{field: value})
    

    但更容易的方法是这样的:

    product = db(db.tbl_product.id==productid).select(db.tbl_product.ALL).first()
    product.update(sponserid=newsponserid)
    db.tbl_product.insert(**db.tbl_product._filter_fields(product))
    

    应用于 Row 对象的 .update() 方法仅更新 Row 对象,而不更新db中的原始记录 . 该表的 ._filter_fields() 方法采用记录( RowStorage 或普通 dict )并返回一个dict,仅包含属于该表的字段(它还会过滤掉 id 字段,db将自动生成该字段) .

相关问题