如果循环continue再次执行for循环

2024-04-27 00:54:08 发布

您现在位置:Python中文网/ 问答频道 /正文

if eqp_id:
    for rule in items:
        if rule.eqp_pricelist == True:
            print "id 1"
            print rule.id
            continue
        print "id 2 out"
        print rule.id

#outputs:
#id1
#5
#id 2 out
#4

怎么可能rule.id = 5rule.id = 4之前

此代码用于方法的产品价格表:

def _price_rule_get_multi(self, cr, uid, pricelist, products_by_qty_by_partner, context=None):

Tags: inidtrueforbyifitemsout
1条回答
网友
1楼 · 发布于 2024-04-27 00:54:08

如您在评论中所述,如果items是使用:items = self.pool.get('product.pricelist.item').browse(cr, uid, item_ids, context=context)获得的,那么items是Odoo ORM的“记录集”,因此您可以使用Odoo ORM(see documentation)的sorted()函数:

sorted(key=None, reverse=False) Return the recordset self ordered by key.

Parameters:
key either a function of one argument that returns a comparison key for each record, or None, in which case records are ordered according the default model's order
reverse if True, return the result in reverse order

你知道吗

要将此函数应用于您的代码,请按以下方式进行更改:

if eqp_id:
    for rule in items.sorted(key=lambda r: r.id):  ## sort by id using sort()...
        if rule.eqp_pricelist == True:
            print "id 1"
            print rule.id
            continue
        print "id 2 out"
        print rule.id

你知道吗

编辑:
我看不清楚你的目标,但也要检查filtered()它是否能帮助你:

if eqp_id:
    for rule in items.sorted(key=lambda r: r.id).filtered(lambda r: r.eqp_pricelist == True):  ## sort by id using sort() AND filtered using eqp_pricelist == True...
        print "[True?] Rule with eqp_pricelist == %s" % rule.eqp_pricelist
        print rule.id

或:

if eqp_id:
    for rule in items.sorted(key=lambda r: r.id).filtered(lambda r: r.eqp_pricelist == Talse):  ## sort by id using sort() AND filtered using eqp_pricelist == False...
        print "[False?] Rule with eqp_pricelist == %s" % rule.eqp_pricelist
        print rule.id

也可以只应用filtered()而不应用sorted()。你知道吗

看看这个:for rule in items.filtered("eqp_pricelist"):

相关问题 更多 >