Odoo Uncaught Ошибка: NameError: имя '' не определена ошибка
Я пытался передать список, чтобы проверить в поле домена в поле зрения. Но когда я выполняю его, отображается ошибка, указывающая, что передается переменная передачи
В файле питона
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 ответа
Домен - это список критериев, каждый из которых представляет собой тройку (список или кортеж) (field_name, operator, value)
где:
field_name
(str) - это имя поля текущей модели или обход отношений через Many2one
с использованием точечной нотации, например 'street'
или же 'partner_id.country'
operator (str)
это оператор, используемый для сравнения field_name со значением Некоторые действительные операторы: =
, !=
, Вы можете найти все доступные операторы домена и их варианты использования здесь. Доступный оператор домена в 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()
функция. Но я бы не рекомендовал это.
Во-первых, чтобы избежать ошибки, list_new
должно быть именем поля.
Во-вторых, в домене вы сравниваете идентификатор (целое число?) Со списком. Может быть, вы имели в виду "в" вместо "="