跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

Felix_ChengF

Felix_Cheng

@Felix_Cheng
关于
帖子
10
主题
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 关于domain,如何跨类比较?
    Felix_ChengF Felix_Cheng

    @braidtim
    很好的问题 🙂 。
    在服务器端python里定义《B object A字段》 的domain,她定义于数据库水平层级(最底层)。换句话说,python端的domain有效于所有使用《B object A字段》的view。而在view中定义的domain,只对该view有效。
    如果你不需要数据库端给该字段预过滤,就可以考虑直接写在view中(这个是我个人看法)

    有点像required定义于python端和view端的意思, 在python端是表示not null于DB级别,即使代码层create,write也不许该字段为False。而在view端required只是要求在界面该字段中必须填入些内容,对于数据库的约束没有一点影响。


  • 关于domain,如何跨类比较?
    Felix_ChengF Felix_Cheng

    @braidtim
    关于date可以写成
    <field name="domain">[('from_date', '&lt;', '2017-08-01')]
    是没有问题的,domain将转换成SQL的Where, 换句话说上面的domain在底层数据库翻译为
    SELECT * FROM table_xxx WHERE from_date < '2017-08-01', (这个可以通过的)

    也可以从另外角度来看:如,
    <field name="domain">[('from_date', '&lt;', 'First date to school')],
    SQL为:
    SELECT * FROM table_xxx WHERE from_date < 'First date to school', 这明显类型不兼容

    结论:domain比较类型兼不兼容, 想想看SQL通不通过就可以验证。
    --(3) 值必须是与field_name的值进行比较的有效值,具体取决于其类型(这个是我在上面贴里提到的)

    至于其他数字类型的如Integer,Float,Boolean应该可以在一定程度上互相比较,有兴趣的话你可以自己
    试试。


  • odoo中怎么把数字转化为百分比显示?
    Felix_ChengF Felix_Cheng

    @鲍永道
    填写时为20,在后台做转换20/100.0。
    %以如下形式显示与视图:
    <field name="your_field_name" class="oe_inline" />%%


  • 关于domain,如何跨类比较?
    Felix_ChengF Felix_Cheng

    @BraidTim 更正一下上贴,搞反了,不好意思:<field name="B2" domain="[('A1', 'operator', B1)]"/>, value是number类型直接写值不加引号,布尔型False或True,String类型加上引号。具体看数据类型,的确是不太容易的。
    如:
    domain="[('state','=','done')]"
    domain="[('user_id','=',uid)]"
    domain="[('user_id','=',False)]"
    domain="[('reconcile_id','=', False), ('credit', '>',0),('amount_to_pay','>',0)] "
    代码生成如下:
    class Test_b(models.Model):
        _name='test.b'
        _b1=fields.Integer(string='B1')
        _b2=fields.Many2one('test.a', string='B2')

    class Test_a(models.Model):]
        _name='test.a'
        _a1=fields.Integer(string='A1')

    XML
    <record id='test_b_form' model='ir.ui.view'>
         xxxxxx....
         yyyyyy...
         <form ....>
            <field name="b1" />
            <field name="b2" domain="[('a1', '&lt;', b1)]"
        </form>
    其中a1为父表(Many2one)字段,b1为本表字段。在父表筛选记录,该记录的a1字段值比b1的value小
    openerp7.0 在domain写'>'是允许的,但是高版本要写转义'&lt;'


  • tree 视图如何自定义列表宽度 自动适应
    Felix_ChengF Felix_Cheng

    @reyouth 在同模块中css加上优先级高的selector来override元素的默认宽度,如
    selectorX { Width : xxxx%; }
    , •tree视图为<table><thead><tr><td>结构,但要注意selectorX别改了其他视图或其他元素
    可以在tree视图中加上自定义的class:
    XML:
    <tree string="Sales Orders" class="mySales" .../>,效果:
    <div class="oe_list o_list_view oe_view mySales"><table class="oe_list_content">
    CSS:
    xxx yyy mySales td [mmm="nnn"] { width: %%; }, 这样保证只影响sales 列表视图


  • 关于domain,如何跨类比较?
    Felix_ChengF Felix_Cheng

    @BraidTim
    以下方式也行:
    <field name="B2" domain="[('B1', 'operator', parent.A1)]"/>

    搜索域中的每个元组需要有3个元素,格式为:('field_name','operator',value),其中:
    (1) field_name必须是对象模型的字段的有效名称,可使用点符号进行many2one关系,例如“partner_id.country”是有效值。
    (2) 运算符必须是一个带有有效比较运算符的字符串:=,!=,>,> =,<,<=,like,ilike,in,not in,child_of
    (3) 值必须是与field_name的值进行比较的有效值,具体取决于其类型


  • function类型的字段,怎么在试图做筛选条件啊???????????
    Felix_ChengF Felix_Cheng

    @winbo
    def _get_stock_qty:
    此处是你的代码.....

    #猜测你的代码应该是在product对象上,所以搜索stock_qty大于0的product_id,返回标准domain三元组: [('xxx', 'operator', 'yyy')], 其中 xxx: id, yyy: Search value.
    def _search_positive_stock(self, cr, uid, ids, field_names, args, context=None):
         if context and context.has_key('location'):
             cr.execute(
            '''select product_id from starmerx_inventory st_inv where location_id=%s and type='shelf' and product_id in %s where st_inv.stock_qty>0''', (context.get('location'), ids,))
             res = cr.fetchall()
             if res:
                 return [('id', 'in', [x[0] for x in res])]
        return [('id', '=', 0)]
    @以上代码尚未经过调试,写的只是思路.
    #fnct_search:加上此属性来允许搜索get_newstock_qty函数字段
    _columns = {
    'get_newstock_qty': fields.function(_get_stock_qty, string=u"库存数量", type='integer', fnct_search=_search_positive_stock),
    }

    xml: <filter string="库存大于0" domain="[('get_newstock_qty', '>', 0)]"/>


  • 复制一个widgets 改个名字 自己调用 , 如何实现?? 各种widgets 类型什么意思??
    Felix_ChengF Felix_Cheng

    @like_odoo

    试着来回答:“还有 widgets注册的方式 都是什么意思 ”

    这是在core.js文件web.core module中return 部分, new Registry()作用是 初始化注册器类和她的map属性,用来登记系统的widgets, map={键值对 } || null。Registry类还有get()和add()等方法。

    作用是:当我们在其他module中创建新的widget,注册widget就是往Registry类的map写键值对。e.g: 如web.form_widgets模块中,可以看到一行core.form_widget_registry.add( 'char', FieldChar ), 实质上就是往注册器map中添加键值对{..., 'char': FieldChar, ....},告知系统有个叫FieldChar的widget类。当需要继承Fieldchar时,就可以用代码core.form_widget_registry.get('char') 来获取他的widget类。

    列举一段代码来说明(顺便说一下:第一个问题应该也可以用这个原理来实现, 没试过):
    var core = require('web.core');
    form_widget_registry= core.form_widget_registry
    var FieldChar = form_widget_registry.get('char');
    var MyFieldChar = FieldChar.extend({
    template: 'MyTemplate' // my custom template
    // overriding ........ if you have
    });
    // register widget
    form_widget_registry.add('my_char', MyFieldChar);


  • odoo 中 |= 是什么意思
    Felix_ChengF Felix_Cheng

    @火灬炎灬焱灬燚

    Iterating on a recordset will yield new sets of a single record ("singletons"), much like iterating on a Python string yields strings of a single characters.

    这是odoo文档的原话,她说:“遍历recordset集合得到的是(单记录的set)子集合(还是集合);这非常像 当遍历一个字符串时,每次得到一个(单字符的串)”。所以不管是‘’单字符‘’字符串还是子集合,依然拥有字符串或集合的所有特性。

    回到你的例子,“ for move in self ”: 遍历了self(recordset集合),move每次得到的是单记录的子集合set,而self也是集合(set),自然而然两个能进行 |=


  • 字段中domain的用法
    Felix_ChengF Felix_Cheng

    首先,要分清"", None,Null的含义, 如果是在python端,它是没有Null的说法。 ""是有值的: 表示该字段值为空字符, 一定要分清值为空和值为空字符的区别。 None是该字段未赋值,None在数据库端表现为对应的Column值为Null(为空)。

    另外,domain="[('parent_id','=', False)]"意思是:筛选出父表PartOption(ORM, class PartOption默认转为table PartOption)中parent_id为空(未赋值)的记录 (parent_id为空字符不能算,虽然人眼看不见), 如果form view中有 field name="option_id" />, 它会是一个下拉列表,显示的内容是筛选出的记录的 name列的值(默认)。

    还有: 2、如果真的需要判断某个字段为假,又怎样用domain表示? 字段为假,说明该字段为Boolean, 比如说res_partner有is_company列, 在表中 is_company列值为 False或者为True,还是用 domain="[('is_company','=', False)]"。

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组