2015-04-08 10 views
0

Привет там коллег программистовOdoo 8 Выбор продукта и Variant в отдельно полях с целью продаж

в Odoo 8 в product.py я вижу метод name_search объединяющее название продукта и вариант, как название продукта. Однако у меня есть сотни атрибутов для моего продукта.

Высота: 500мм, 505мм, 3000мм ...

Ширина: 500мм, 505мм, 4000мм ...

Так что делает невозможным поиск требуемого типа Variant

Так что мне нужно первое выберите продукт, Затем Высота атрибута, Затем Ширина атрибут

В теории мне нужно переопределить метод Поиск

  1. удалить вариант в названии продукта

  2. создать метод поиска, чтобы выбрать первый атрибут

  3. создать еще один метод поиска, чтобы выбрать второй атрибут

  4. то ему необходимо вернуть название товара + att1 + att2 в основной поисковой метод

Может ли кто-нибудь указать мне правильное направление?

My Model класс product_product (models.Model):

_inherit = 'product.product' 

Этот фильтр поиска продукции по выбранной категории продукта

def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): 
    if context is None: 
     context = {} 
    if context.get('material_id'): 
     productobj = self.pool.get('product.product').read(cr, uid, context['material_id'],['materialoptions_id']) 

     args = [('categ_id','=',productobj['materialoptions_id'][0])] + args 
    return super(product_product, self).search(cr, uid, args, offset, limit, order, context=context, count=count) 

И здесь я хочу Sperate продукт и его атрибуты

НЕ ДОЛЖЕН ЗНАТЬ, ЧТО ДОЛЖНО НАЧНЕТСЯ БЕЗ РАЗВИТИЯ ПРОДУКТА.PY NA ME_SEARCH

продукт.ру

Защиту name_get (не сам, кр, пользователь, идентификаторы, контекст = None): , если контекст не None: контекст = {} , если isinstance (идентификаторы, (Int, длинные)): DS = [IDS ] если не LEN (идентификаторы): вернуться []

def _name_get(d): 
     name = d.get('name','') 
     code = context.get('display_default_code', True) and d.get('default_code',False) or False 
     if code: 
      name = '[%s] %s' % (code,name) 
     return (d['id'], name) 

    partner_id = context.get('partner_id', False) 
    if partner_id: 
     partner_ids = [partner_id, self.pool['res.partner'].browse(cr, user, partner_id, context=context).commercial_partner_id.id] 
    else: 
     partner_ids = [] 

    # all user don't have access to seller and partner 
    # check access and use superuser 
    self.check_access_rights(cr, user, "read") 
    self.check_access_rule(cr, user, ids, "read", context=context) 

    result = [] 
    for product in self.browse(cr, SUPERUSER_ID, ids, context=context): 
     variant = ", ".join([v.name for v in product.attribute_value_ids]) 
     name = variant and "%s (%s)" % (product.name, variant) or product.name 
     sellers = [] 
     if partner_ids: 
      sellers = filter(lambda x: x.name.id in partner_ids, product.seller_ids) 
     if sellers: 
      for s in sellers: 
       seller_variant = s.product_name and (
        variant and "%s (%s)" % (s.product_name, variant) or s.product_name 
        ) or False 
       mydict = { 
          'id': product.id, 
          'name': seller_variant or name, 
          'default_code': s.product_code or product.default_code, 
          } 
       result.append(_name_get(mydict)) 
     else: 
      mydict = { 
         'id': product.id, 
         'name': name, 
         'default_code': product.default_code, 
         } 
      result.append(_name_get(mydict)) 
    return result 
+0

Я рассмотрел создания своих собственных полей атрибутов ... а не борется с этим методом поиска. но существующая функция атрибута - это то, что мне нужно. В том смысле, что его связанный с ним собственный Билль материалов. Пожалуйста, пожалуйста, помогите мне :) готовы отправить деньги за код haha –

ответ

0

Так что я думаю, что лучше «Работа Around» будет, если я создать 3 пользовательских полей

Typ
  • продукта е (Все названия продуктов в выбранной категории)

  • Ширина (атрибуты связаны с продуктом, выбранным в «Тип продукта»)

  • Высота (атрибуты связаны с продуктом, выбранным в «Тип продукта»)

над полем продукта. Затем, объединяя эти 3 значения, я могу передать контекстное «имя» методу поиска продукта для соответствия. Таким образом, только показывая один продукт, соответствующего указанным выше критерии

Надеется, что это помогает -me-

Почему это лучший способ? вероятно, добавил это. образовательной ценности, а что нет.

Поскольку во время отладки вы увидите продукт, а его атрибут разделяет идентификатор. Это потому, что odoo рассматривает каждый вариант продукта как продукт. Там нет «основного» продукта, а затем это варианты для детей. Это одно и то же.

LOOK HERE=================================================== 

{'lang': 'en_US', 'tz': False, 'uid': 1, 'material_id': 19} 

LOOK HERE3=================================================== 

{'lang': 'en_US', 'tz': False, 'uid': 1, 'material_id': 19} 

[33, 34, 35, 36] 

LOOK HERE2=================================================== 

{'default_code': False, 'id': 33, 'name': u'Palisade Fence (Domestic 110mm) (1800, 3000mm)'} 

LOOK HERE3=================================================== 

{'lang': 'en_US', 'tz': False, 'uid': 1, 'material_id': 19} 

[33, 34, 35, 36] 

LOOK HERE2=================================================== 

{'default_code': False, 'id': 34, 'name': u'Palisade Fence (Domestic 110mm) (1800, 3005mm)'} 

LOOK HERE3=================================================== 

{'lang': 'en_US', 'tz': False, 'uid': 1, 'material_id': 19} 

[33, 34, 35, 36] 

LOOK HERE2=================================================== 

{'default_code': False, 'id': 35, 'name': u'Palisade Fence (Domestic 110mm) (1805, 3000mm)'} 

LOOK HERE3=================================================== 

{'lang': 'en_US', 'tz': False, 'uid': 1, 'material_id': 19} 

[33, 34, 35, 36] 

Именно поэтому каждый вариант имеет свой собственный Билл материалов (Какой именно то, что мне нужно, спасибо блестящих разработчиков odoo) Так что, если вы не хотите, чтобы изменить структуру odoo, сначала необходимо пройти контекст для фильтрации продуктов, а не наоборот

Надеюсь, это имеет смысл каждый. Я ОЧЕНЬ новичок в программировании, поэтому, пожалуйста, скажите мне, если мне не хватает сюжета.

odoo невероятен спасибо, ребята