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 должно быть именем поля.

Во-вторых, в домене вы сравниваете идентификатор (целое число?) Со списком. Может быть, вы имели в виду "в" вместо "="

Другие вопросы по тегам