我尝试传递一个列表来查看视图端的域字段。但是当我执行它时显示一个错误,告诉传递变量已定义
在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
答案 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()
功能。但我不建议这样做。