2016-09-13 2 views
0

я есть One2many поле product_attributes в product.template и значение поля в product.attributes.customИспользование домена в поисках One2many поля в виде списка в Odoo-9

class ProductTemplateCus(models.Model): 
    _inherit = 'product.template' 
    product_attributes = fields.One2many('product.attributes.custom','product_id') 

class ProductAttributes(models.Model): 
    _name = 'product.attributes.custom' 
    value = fields.Char(string='Value') 
    product_id = fields.Many2one('product.template',string='Product') 

продукта 1 product_attributes содержит 2 значения:

value= 'color: red' 
value= 'others: red' 

продукт 2 product_attributes содержит 2 значения:

value= 'color: white' 
value= 'others: red' 

Я сделал, как показано ниже в поисках XML:

<field 
name="product_attributes" string="Color" 
filter_domain="['&amp;',('product_attributes.value','ilike','color'),('product_attributes.value','ilike',self)]" 
/> 

Так что если красного ищутся только продукт 1, содержащих как цвета и красный. Но я не могу получить результат. Я получаю оба продукта.

Есть ли решение для этого?

ответ

1

AFAIK search_domain здесь ничего не значит. Вместо этого вы должны использовать domain.

+0

Теперь я знаю разницу между filter_domain и доменом. Я не знал об этом. Для решения моей проблемы я использовал функцию поиска, чтобы получить идентификаторы продуктов, которые выбрали только имя и значение атрибута и включены в аргументы в функции поиска. – Manoj

1

Есть несколько типов доменов для поля в целях поиска:

  • domain - так же, как домен на объявлении поля в классе питона, ограничивает запись получила из базы данных;
  • filter_domain - переопределяет метод name_search, который обычно имеет только ('name', 'ilike', self).

В вашем случае, я считаю, вам нужен filter_domain.


Просто предложение, вы можете добавить : после имени атрибута, чтобы различать между атрибутом и его значением, при условии, что вы используете один и тот же конвенции для всех атрибутов: ('product_attributes.value', 'ilike', 'color: ')

оператора по умолчанию между доменами & и в этом случае можно опустить.

+0

Я решил это с помощью функции поиска.Теперь я знаю разницу между filter_domain и доменом. , – Manoj

0

Для решения моей проблемы, я использовал функцию поиска, чтобы получить идентификаторы продуктов, которые выбрали имя атрибута и только значение и включен, что аргументы в функции поиска, как

args += [['id', 'in', productids]] 

Я не знаю, было ли это право подход к этому. Но это решило мою проблему.

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