【问题标题】:How to show/hide fields shown in Filter, Group By selection?如何显示/隐藏过滤器、分组依据选择中显示的字段?
【发布时间】:2018-03-08 10:31:30
【问题描述】:

您好,我正在尝试隐藏/显示操作(树视图)过滤器/分组依据字段选择部分中的一些字段。我找到了使用 fields_get 函数执行此操作的解决方案,但是我遇到的问题是,当您在菜单项之间切换时,字段不会更新。我的解决方案如下。

@api.model
def fields_get(self, allfields=None, attributes=None):
    """Extend to hide fields from custom search."""
    # u'route_view': u'route_accounting'
    # Fieldai kuriuos reikia rodyti
    route_accounting_filter = ['last_adt', 'first_alt', 'carrier', 'cmr_receive_date',
                               'cmr_reg_no_1', 'cmr_req',
                               'cmr_send_date', 'send_seperate_documents',
                               'freight_customer', 'last_invoice_send_date',
                               'load_country_id', 'load_full_adr', 'last_relevant_invoice',
                               'payer', 'customer', 'other_po',
                               'purchase_order_route_loc', 'name', 'freight_so',
                               'trailer_id', 'truck_id', 'unload_country_id',
                               'unload_full_adr', 'billing_data', 'invoice_billing_no',
                               'cmr', 'cmr_copy_receive_date', 'debt',
                               'declaration', 'last_invoice_send_date', 'transportation_done',
                               'delivery_note', 'document_packet', 'documents_delayed_to_receive',

                               'transportation_done_date', 'last_invoice_send_date', 'cmr_reg_userr',
                               'cmr_reg_date', 'product_description'

                               ]

    route_accounting_group = ['name', 'last_adt', 'first_alt', 'carrier', 'cmr_reg_date'
                              'cmr_reg_userr', 'cmr_req', 'freight_customer', 'payer', 'load_country_id',
                              'trailer_id', 'truck_id', 'unload_country_id', 'product_route_id'
                              ]

    other_route_group = ['other_po_carrier', 'other_so_partner', 'other_po_description',
                         'other_po_truck', 'other_po_trailer', 'ferry_product', 'other_so_partner',
                         'other_po_carrier', 'other_po_description', 'other_po_truck', 'other_po_trailer',
                         'other_po_carrier_loading_time', 'other_po_carrier_unloading_time',
                         'last_relevant_bill_number'
    ]

    other_route_filter = ['name', 'other_so', 'other_po',
                         'vendor_reference_other', 'transportation_done', 'ferry_product', 'name'
                         ]

    res = super(RouteData, self).fields_get(
        allfields=allfields,
        attributes=attributes
    )

    if 'route_view' in self.env.context and self.env.context['route_view'] == 'route_accounting':
        print "ROUTE (ACCOUNTING VIEW))))"
        for field in res:
            if field not in route_accounting_filter:
                res[field]['selectable'] = False

        for field in res:
            if field not in route_accounting_group:
                res[field]['sortable'] = False

    elif 'route_view' in self.env.context and self.env.context['route_view'] == 'route_other':
        print "ROUTE (OTHER VIEW))))"
        for field in res:
            if field not in other_route_filter:
                res[field]['selectable'] = False

        for field in res:
            if field not in other_route_group:
                res[field]['sortable'] = False

    return res

我的视图如图所示。基本上每个菜单项都有自己的操作,但来自同一个表,我相信出于这个原因,即使我的解决方案检查上下文有效(它打印出他在不同的视图中)他不会更新 Group By 中显示的字段/Filter (即使代码有效)。有没有我忘记的东西,或者可能有不同的解决方案可以轻松完成此任务? (如果不用JS就好了)

【问题讨论】:

  • 一个好问题

标签: python odoo odoo-10 odoo-view


【解决方案1】:

我不确定我是否理解这个问题。不管怎样,看看我的建议:

解决方案 0

如果我理解得很好,您只想修改搜索视图。例如,如果某些搜索视图如下所示:

<record id="original_search_view" model="ir.ui.view">
    <field name="name">name.search</field>
    <field name="model">model.name</field>
    <field name="arch" type="xml">
        <search string="Partner Record">
            <field name="partner_id" string="Partner" filter_domain="[('partner_id','ilike',self)]"/>
            <field name="operation_key" string="Operation key" filter_domain="[('operation_key','ilike',self)]"/>
            <field name="partner_vat" string="Record" filter_domain="['|',('partner_vat','ilike',self),('partner_id','ilike',self)]"/>
            <separator/>

            <filter name="draft_filter" domain="[('state', '=', 'draft')]"/>

            <group expand="0" string="Group by..." >
                <filter string="Operation key" domain="[]" context="{'group_by' : 'operation_key'}"/>
            </group>
        </search>
    </field>
</record>

你可以像这样通过继承来改变它

<record id="custom_search_view" model="ir.ui.view">
    <field name="name">custom.name.search</field>
    <field name="model">model.name</field>
    <field name="inherit_id" ref="module_name.original_search_view" />
    <field name="arch" type="xml">
        <!-- remves parnet_vat field from filters -->
        <field name="partner_vat" position="replace" />
        <filter name="draft_filter" position="replace" />

        <!-- removes group by filters -->
        <xpath expr="/search/group[1]" position="replace" />
    </field>
</record>

注意:小心移除物品。有时其他模块可以在原始视图中添加更多字段,它们可能需要原始字段来获取位置。因此,您可以使它们不可见,而不是完全删除它们。

解决方案 1

您可以从头开始创建一个新的搜索视图并将其添加到带有 search_view_id 字段的操作窗口,如下所示:

<record model="ir.actions.act_window" id="credit_control_line_action">
    <field name="name">Credit Control Lines</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">model.name</field>
    <field name="domain"></field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="view_id" ref="custom_tree_view"/>

    <!-- filters selected by default, the format is: { 'search_default_[filter_name]': 1, }  -->
    <field name="context">{'search_default_filter_draft': 1, 'search_default_filter_to_be_sent': 1}</field>

    <!-- this search view is going to be used instead of the default view -->
    <field name="search_view_id" ref="custom_search_view"/>
</record>

注意:有关Odoo Documentation上的搜索视图的更多信息

【讨论】:

  • 感谢您提供非常丰富的答案。这是一个很好的答案,这是我现在正在使用的东西。搜索的问题是你不能做条件(比如大于/小于日期等)。您可以使用过滤器按钮执行这些条件。问题是我的表有很多字段,但我只想看看 15 个字段。我用字段得到的解决方案很好。但问题是,当您在菜单项(图像中的其他路线、路线(会计))之间切换时,过滤器不会被更新。不管怎样,谢谢你的回答:)。
  • 是的,您可以编写填充filter_domain 属性的条件。我想我不太理解你的问题。您的意思是您希望每个视图有不同数量的列吗?你需要一个特殊而复杂的filter_domain吗?
  • 你的意思是你想在输入你的词搜索到搜索框时进行特殊过滤吗?
  • 没有。忘记搜索框。在搜索框下有一个过滤器(看截图)和分组按钮。我需要删除过滤器中显示的字段。我的 fields_get 解决方案就是这样做的,除非你在 menuitems 之间切换。
  • 好的,那我的回答是对的。您可以在搜索视图上使用字段、过滤器和分组过滤器。您想删除过滤器。我在示例中添加了一个过滤器:&lt;filter name="draft_filter" domain="[('state', '=', 'draft')]"/&gt;。您可以创建一个不带过滤器的新搜索视图并将其作为我的第二个解决方案添加到操作中,或者您可以通过继承修改原始搜索视图并删除过滤器元素:&lt;filter name="draft_filter" position="replace" /&gt;
猜你喜欢
  • 2023-03-22
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2019-10-19
  • 2020-12-10
相关资源
最近更新 更多