2016-12-15 4 views
1

Я пытаюсь создать действие сервера через интерфейс Odoo, который изменит домен другого поля в представлении. Это, кажется, довольно общий потребительной случай, когда дело с исходным кодом Odoo, как вы можете увидеть в следующей документации:Как вернуть домен от действия сервера Odoo

https://www.odoo.com/documentation/10.0/reference/orm.html#odoo.api.onchange

В тех документах, они показывают, что если бы я был в исходном коде модель, я могу определить onchange метод и вернуть домен, например, поведение я пытаюсь выполнить в sale.order.line модели будет:

@api.onchange('product_id') 
def _onchange_product(self): 
    return { 
     'domain': {'route_id': [('id', 'in', x_all_route_ids.ids)]} 
    } 

другими словами, когда произведение заказа клиента изменения строки, обновите доступные параметры в поле route_id.

Есть ли способ выполнить эту же задачу с помощью действия сервера, созданного с помощью пользовательского интерфейса? Мне трудно понять, как вернуть домен из кода Python.

Заметки в секции кода говорят:

# Available variables: 
# - time, datetime, dateutil, timezone: Python libraries 
# - env: Odoo Environement 
# - model: Model of the record on which the action is triggered 
# - record: Record on which the action is triggered if there is one, otherwise None 
# - records: Records on which the action is triggered if there is one, otherwise None 
# - log : log(message), function to log debug information in logging table 
# - Warning: Warning Exception to use with raise 
# To return an action, assign: action = {...} 

Я не понимаю, как я могу использовать это, чтобы вернуть домен. Кто-нибудь знает?

Я попытался установить поле питон кода просто:

domain = {'route_id': [('id', 'in', record.x_all_route_ids)]} 

Но это не работает. Список route_id не изменяется.

ответ

1

Я получил некоторое представление о технической поддержке Odoo, и выясняется, что это возможно. Все, что назначено переменной action, будет считаться возвращаемым значением для действия сервера.

Таким образом, вы можете просто сделать:

action = { 
    'domain': { 
     'route_id': [('id', 'in', record.x_all_route_ids.ids)] 
    } 
} 
+0

Очень интересно! – CZoellner

0

Невозможно. Будут корректно оцениваться только эти специальные методы изменения метода.

+1

Оказывается, это возможно. См. Мой ответ. – flyingL123

Смежные вопросы