Odoo搜索视图无法应用这两种过滤器:逐个产品和按位置过滤

时间:2018-05-03 07:17:26

标签: xml python-2.7 odoo odoo-10 odoo-9

我有搜索视图,我试图按产品过滤分组(' group_by':' product_id')并按位置过滤(' search_my_quants': 1)但似乎quants仅按产品分组,而不是按位置过滤。我不明白为什么。

搜索视图:

<record id="view_stock_quant_search" model="ir.ui.view">
    <field name="name">stock.quant.search</field>
    <field name="model">stock.quant</field>
    <field eval="1" name="priority"/>
    <field name="arch" type="xml">
        <search string="Quants">
            <field name="location_id"/>
            <field name="product_id"/>
            <field name="lot_id" />
            <group expand='0' string='Filters'>
                <filter name="work_hardware" string="Hardware" domain="[('product_id.attribute', '=', 'work_hardware')]"/>
                <filter name="hide_reserved" string="Hide Reserved" domain="[('reservation_id', '=', False)]"/>
            </group>
            <group expand='0' string='Group by...'>
                <filter string='Product' name="productgroup" context="{'group_by': 'product_id'}"/>
           </group>
        </search>
    </field>
</record>

xml part

<record model="ir.actions.act_window" id="action_stock_quant_my">
    <field name="name">Mine</field>
    <field name="res_model">stock.quant</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="view_id" ref="view_stock_quant_tree"/>
    <field name="search_view_id" ref="view_stock_quant_search"/>
    <field name="context">{'group_by': 'product_id', 'search_my_quants': 1, 'search_default_hide_reserved': 1, 'search_default_work_hardware':1}</field>
</record>

python part

class stock_quant(models.Model):
    _inherit = "stock.quant"

    @api.model
    def search(self, args, offset=0, limit=None, order=None, count=False):
        context = self.env.context or {}
        if context.get('search_my_quants'):
            args.append(('location_id.partner_id.id', '=', self.env.user.partner_id.id))
        return super(stock_quant, self).search(args, offset, limit, order, count=count)

如果我在搜索视图中没有使用group by filter,那么我有过滤位置。如何同时使用这两个过滤器?

解决:

在搜索视图中,我使用域更新了过滤器 productgroup ,这些域往往会找到当前用户的位置。

<filter string="Employee hardware" name="mano" context="{'group_by': 'product_id'}" domain="[('location_id.partner_id.user_ids.id', '=', uid)]"/>

2 个答案:

答案 0 :(得分:0)

您可以写如下:

$sql = "INSERT INTO characters (GUID,Charactername,Password) VALUES (:GUID,:Charactername,FLOOR( 1000 + ( RAND( ) *8999 ) ));
        SELECT * FROM characters WHERE id = LAST_INSERT_ID()";

$stmt= $pdo->prepare($sql);
$stmt->bindParam(':GUID', $_GET['GUID'], PDO::PARAM_INT);
$stmt->bindParam(':Charactername', $_GET['Charactername'], PDO::PARAM_STR);                 
if ($stmt->execute()) {
    do {
        if ($rowset = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo " THIS password created with FLOOR: " . $rowset['Password'];
        }
    } while ($stmt->nextRowset());
}

答案 1 :(得分:0)

我遇到了这个问题,然后才发现当我在python(覆盖搜索方法)中使用的按组过滤器无法正常工作时。

使用分组方式时,您应覆盖read_group,因为它是对记录进行分组时调用的名称:

    @api.model
    def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
        context = self.env.context or {}
        domain = domain or []
        if context.get('search_my_quants'):
            domain.append(('location_id.partner_id.id', '=', self.env.user.partner_id.id))
        return super(stock_quant, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby, lazy=lazy)

在覆盖search方法以扩展域以覆盖read_group方法以处理相同情况时,请记住这一点。 至少使用此解决方案,您在选择过滤器时不必总是按产品分组。