Odoo Uncaught Error:NameError:name''未定义错误

时间:2015-06-03 09:01:50

标签: python openerp odoo nameerror

我尝试传递一个列表来查看视图端的域字段。但是当我执行它时显示一个错误,告诉传递变量已定义

在python文件中

class generate_time_table_line(osv.osv_memory):
@api.onchange('lecturer_id')
def onchange_lecturer(self):
    if self.lecturer_id:
        global list_new
        list_new =[1]
        return list_new
视图文件中的

<record id="view_gen_time_table_line_tree" model="ir.ui.view">
        <field name="name">gen.time.table.line.tree</field>
        <field name="model">gen.time.table.line</field>
        <field name="priority" eval="8" />
        <field name="arch" type="xml">
            <tree string="TimeTable Line" editable="top">
                <field name="day" />
                <field name="period_id" />
                <field name="lecturer_id"  />
                <field name="subject_id" domain="[('id','=',list_new)]"/>
            </tree>
        </field>
    </record>

错误

Uncaught Error: NameError: name 'list_new' is not defined

2 个答案:

答案 0 :(得分:0)

首先,为避免错误,list_new应为字段名称。

其次,在域中您将id(整数?)与列表进行比较。也许你的意思是&#39; in&#39;而不是&#39; =&#39;

答案 1 :(得分:0)

域名是一个标准列表,每个标准是(field_name, operator, value)的三元组(列表或元组),其中:

field_name(str)是当前模型的字段名称,或使用点符号遍历Many2one的关系,例如'street''partner_id.country'

operator (str)是一个用于比较field_name和值的运算符。一些有效的运算符是:=!=。您可以在Available domain operator in openerp/odoo?

找到所有可用的域名运营商及其使用案例

value是一个变量类型,必须与命名字段具有可比性(通过运算符)。

所以在你的代码中,

如果将list_new放在python文件中的域中,list_new应该是生成值或有效字段名称的有效变量。在后面,ORM将为您计算值。

如果您在list_new文件中将xml置于某个域,则list_new应该是有效的field_name

我认为以下内容可能符合您生成动态域的需求:

使用功能字段保存域并在视图中使用该字段,如

def _get_domain(self, cr, uid, ids, field_name, arg, context=None):
    record_id = ids[0] 
    # do some computations....
    return {record_id: YOUR DOMAIN} 

'list_new': fields.function(_get_domain, type='char', size=255, method=True, string="Domain"),

和xml:

<field name="subject_id" domain="list_new" />

另一种方式是fields_view_get()功能。但我不建议这样做。