在多公司模式下搜索产品 Odoo
search products in multicompany mode Odoo
受影响的版本:
Odoo 10 CE 与多家公司
描述:
我正在尝试将随机字母数字值添加到 default_code 的产品
它在单一公司 Odoo 中运行良好,但在多公司实例中却不行
这是我每晚 运行 在 cron 中调用的函数
@api.multi
def affect_sku(self):
_logger.info("running affect_sku")
Product = self.env['product.product']
_logger.info("Model ::: %s" % Product)
product_ids = Product.search([('active', '=', True), ('default_code', '=', '')])
_logger.info("Les Produits ::: %s " % product_ids)
if product_ids:
for product_id in product_ids:
_logger.info("Product id : %s" % product_id)
product = Product.browse(product_id.id)
_logger.info("Old Product default code : %s" % product.default_code)
x = self.randomStringDigits(13)
y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
_logger.info("y = %s" % y)
while y :
x = self.randomStringDigits(13)
y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
product.default_code = x
_logger.info("SKU de %s : %s" % (product.id, product.default_code))
使用SUPER USER
因为他有权限查看所有产品,你可以稍微加强一下你的代码:
# and use model for crons
@api.model
def affect_sku(self):
_logger.info("running affect_sku")
Product = self.env['product.product'].sudo() # use SUPER USER Jus to skip any access rights
_logger.info("Model ::: %s" % Product)
# no need to pass active it's passed by default
product_ids = Product.search(['|', ('default_code', '=', ''), ('default_code', '=', False)])
_logger.info("Les Produits ::: %s " % product_ids)
# no need to check just loop directly
for product in product_ids:
_logger.info("Product id : %s" % product)
# no need to browse it's all ready a record set
_logger.info("Old Product default code : %s" % product.default_code)
while True :
random_code = self.randomStringDigits(13)
# no need to pass active and use search_count
if not self.env['product.product'].search_count([('default_code', '=', random_code )]):
break
product.default_code = random_code
_logger.info("SKU de %s : %s" % (product.id, product.default_code))
受影响的版本: Odoo 10 CE 与多家公司
描述:
我正在尝试将随机字母数字值添加到 default_code 的产品
它在单一公司 Odoo 中运行良好,但在多公司实例中却不行
这是我每晚 运行 在 cron 中调用的函数
@api.multi
def affect_sku(self):
_logger.info("running affect_sku")
Product = self.env['product.product']
_logger.info("Model ::: %s" % Product)
product_ids = Product.search([('active', '=', True), ('default_code', '=', '')])
_logger.info("Les Produits ::: %s " % product_ids)
if product_ids:
for product_id in product_ids:
_logger.info("Product id : %s" % product_id)
product = Product.browse(product_id.id)
_logger.info("Old Product default code : %s" % product.default_code)
x = self.randomStringDigits(13)
y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
_logger.info("y = %s" % y)
while y :
x = self.randomStringDigits(13)
y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
product.default_code = x
_logger.info("SKU de %s : %s" % (product.id, product.default_code))
使用SUPER USER
因为他有权限查看所有产品,你可以稍微加强一下你的代码:
# and use model for crons
@api.model
def affect_sku(self):
_logger.info("running affect_sku")
Product = self.env['product.product'].sudo() # use SUPER USER Jus to skip any access rights
_logger.info("Model ::: %s" % Product)
# no need to pass active it's passed by default
product_ids = Product.search(['|', ('default_code', '=', ''), ('default_code', '=', False)])
_logger.info("Les Produits ::: %s " % product_ids)
# no need to check just loop directly
for product in product_ids:
_logger.info("Product id : %s" % product)
# no need to browse it's all ready a record set
_logger.info("Old Product default code : %s" % product.default_code)
while True :
random_code = self.randomStringDigits(13)
# no need to pass active and use search_count
if not self.env['product.product'].search_count([('default_code', '=', random_code )]):
break
product.default_code = random_code
_logger.info("SKU de %s : %s" % (product.id, product.default_code))