我不明白正常的波兰语符号(NPN 或 PN)。如何在Odoo中构建复杂的域?



有人可以将以下波兰语符号翻译成其SQL对应符号吗?

['|', '&', ('is_company','=', True),('parent_id', '=', False),('company_name', '!=', False),('company_name', '!=', '')]

我的猜测是:

is_company = True OR parent_id = False AND company_name <> False AND company_name <> ''

无论我多么努力地理解它,我都无法理解这个符号的概念。请帮忙。

更新

我试图将上述符号扩展为:

((is_company = True AND parent_id = False) OR company_name <> False) AND company_name <> '' AND customer_type_id <> False

我完全同意你的看法,每次我必须使用这种波兰符号做一个复杂的域时,我都必须绞尽脑汁来管理它。

我认为您正在寻找的域名是:

['&amp;', '|', '&amp;', ('is_company', '=', True), ('parent_id', '=', False), ('company_name', '!=', False), '&amp;', ('company_name', '!=', ''), ('customer_type_id', '!=', False)]

我编造了一种方法来获取这些复杂的域,它正在工作:

首先,我写一封信而不是每个条件:

A => is_company = True => ('is_company', '=', True)
B => parent_id = False => ('parent_id', '=', False)
C => company_name <> False => ('company_name', '!=', False)
D => company_name <> '' => ('company_name', '!=', '')
E => customer_type_id <> False => ('customer_type_id', '!=', False)

然后仅使用字母和标准运算符构建所需的表达式,忘记波兰语符号和条件:

Step 0. => ((A and B) or C) and D and E

之后,对你应该执行的第一个操作进行分组(不要介意到目前为止缺少的运算符):

Step 1. => ((A and B) or C) and D and E
Step 2. => (AB or C) and D and E
Step 3. => ABC and D and E
Step 4. => ABC and DE

现在我们只有一个运算符,让我们再次开始分解它(并将运算符移动到每个条件的左侧),按照您分组操作的相反顺序(例如,从步骤 3 到 4 您对 DE 进行分组,所以现在,从步骤 4 到 3,分解 DE 并将其运算符移动到左侧):

Step 4. => and ABC DE
Step 3. => and ABC and D E
Step 2. => and or AB C and D E
Step 1. => and or and A B C and D E

现在更改运算符并添加逗号、引号和括号:

['&amp;', '|', '&amp;', A, B, C, '&amp;', D, E]

最后,将字母替换为条件,您就有了您的域。最好面对面解释,但也许你能够理解一切。

注意:我不删除&amp;运算符(尽管你不写 他们,Odoo应该默认接受它们)因为我的经验是 对于最大的域,如果我不写&amp;,域就没有 工作。我想这是在有很多嵌套条件时发生的, 但我的建议是总是写它们。

相关内容

  • 没有找到相关文章

最新更新