2013-07-26 5 views
5

के बजाय many2one में एक और क्षेत्र मैं यह मेरे सभी उत्पादों के नाम (product_template वर्ग से नाम विशेषता) और दुकानों आईडी अंदर प्रदर्शित करता है इसप्रदर्शन नाम

'product_id': fields.many2one('product.product', 'Product', required=True) 

की तरह एक many2one क्षेत्र की है। मैं नाम और स्टोर आईडी के बजाय उत्पाद का part_number प्रदर्शित करना चाहता हूं। Openerp7 में ऐसा करने का कोई तरीका है। आपके समय के लिए धन्यवाद।

उत्तर

-1

जब आप ब्राउज़ विधि का उपयोग करते हैं, तो आपको उत्पाद की सभी जानकारी डेटा मिलती है।

गुण अगर आप मिल का उपयोग करें:

<yourobject>.product_id.name 
<yourobject>.product_id.default_code 
<yourobject>.product_id.type 
<yourobject>.product_id.<your_property> 

मुझे आशा है कि आप का उपयोग करें।

5

ऐसा करने के कुछ तरीके हैं।

संबंधपरक फ़ील्ड के लिए प्रदर्शित किया गया नाम name_get विधि का परिणाम है। आप product.product का उत्तराधिकारी बना सकते हैं और name_get ओवरराइड कर सकते हैं लेकिन यह पूरे सिस्टम को प्रभावित करेगा, प्रत्येक बार उत्पाद प्रदर्शित होने पर यह इसे बदल देगा। आप context का उपयोग करके इस पर कोड कर सकते हैं लेकिन यह गन्दा हो रहा है।

यदि आप सिर्फ कोड चाहते हैं तो मैं इस तरह एक संबंधित क्षेत्र बनाउंगा।

'product_ref': fields.related(
     'product_id', 
     'part_number', 
     string='Product', 
     readonly=True, 
     type='char', 
     help = 'The product part number', 
     ) 

और फिर इसे अपने फॉर्म पर उपयोग करें। ओआरएम परत इतना स्मार्ट है कि यदि आपके विशेष रिकॉर्ड में कोई उत्पाद आईडी नहीं है या उत्पाद में कोई भाग संख्या नहीं है तो यह इसे शानदार तरीके से संभाल लेगा।

यदि आपको थोड़ा ट्रिकियर होना आवश्यक है तो आप एक कार्यात्मक क्षेत्र बना सकते हैं जो उदाहरण के लिए नाम और भाग संख्या दिखाता है।

+0

धन्यवाद एड्रियन, यह वास्तव में अच्छा और उपयोगी था। हालांकि मेरा इरादा मौजूदा उत्पाद सूची (नाम के बजाय, भाग संख्या से खोजना चाहते हैं) से भाग संख्या को खोजना है। यदि मैं कई2 फ़ील्ड निर्दिष्ट करता हूं तो मैं नाम के पहले कुछ अक्षर टाइप कर सकता हूं और उन उत्पादों के नामों को टाइप कर सकता हूं जो मेरे मामले में मुझे भाग संख्या से खोजना होगा। आशा है कि मैंने अपनी ज़रूरत को स्पष्ट रूप से समझाया है। कृपया मुझे इसे लागू करने के लिए कुछ सुझाव दें। धन्यवाद – Vivek

0

मेरा मूल उद्देश्य सभी उत्पादों के लिए उत्पाद की भाग संख्या प्रदर्शित करना था और भाग-संख्या द्वारा खोज करने की क्षमता देना था।

मैं इसे product.product कक्षा में इस तरह से, (#Vivek और #END के बीच कोड मेरी कोड के टुकड़े कर रहे हैं)

def name_get(self, cr, user, ids, context=None): 
    if context is None: 
     context = {} 
    if isinstance(ids, (int, long)): 
     ids = [ids] 
    if not len(ids): 
     return [] 
    def _name_get(d): 
     name = d.get('name','') 
     code = d.get('default_code',False) 
     # Vivek 
     part_number = d.get('part_number',False) 
     if part_number: 
      name = '%s-%s' % (name,part_number) 
     #End 
     elif code: 
      name = '[%s] %s' % (code,name) 
     elif d.get('variants'): 
      name = name + ' - %s' % (d['variants'],) 
     return (d['id'], name) 

    partner_id = context.get('partner_id', False) 

    result = [] 
    for product in self.browse(cr, user, ids, context=context): 
     sellers = filter(lambda x: x.name.id == partner_id, product.seller_ids) 
     # Vivek 
     prd_temp = self.pool.get('product.template').browse(cr, user, product.id, context=context) 
     # End 
     if sellers: 
      for s in sellers: 
       mydict = { 
          'id': product.id, 
          'name': s.product_name or product.name, 
          #vivek 
          'part_number': prd_temp.part_number, 
          #End 
          'default_code': s.product_code or product.default_code, 
          'variants': product.variants 
          } 
       result.append(_name_get(mydict)) 
     else: 
      mydict = { 
         'id': product.id, 
         'name': product.name, 
         #vivek 
         'part_number': prd_temp.part_number, 
         #End 
         'default_code': product.default_code, 
         'variants': product.variants 
         } 
      result.append(_name_get(mydict)) 
    return result 

def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100): 
    if not args: 
     args = [] 
    if name: 
     ids = self.search(cr, user, [('default_code','=',name)]+ args, limit=limit, context=context) 
     if not ids: 
      ids = self.search(cr, user, [('ean13','=',name)]+ args, limit=limit, context=context) 
     if not ids: 
      # Do not merge the 2 next lines into one single search, SQL search performance would be abysmal 
      # on a database with thousands of matching products, due to the huge merge+unique needed for the 
      # OR operator (and given the fact that the 'name' lookup results come from the ir.translation table 
      # Performing a quick memory merge of ids in Python will give much better performance 
      ids = set() 
      ids.update(self.search(cr, user, args + [('default_code',operator,name)], limit=limit, context=context)) 
      if not limit or len(ids) < limit: 
       # we may underrun the limit because of dupes in the results, that's fine 
       ids.update(self.search(cr, user, args + [('name',operator,name)], limit=(limit and (limit-len(ids)) or False) , context=context)) 
       # vivek 
       # Purpose : To filter the product by using part_number 
       ids.update(self.search(cr, user, args + [('part_number',operator,name)], limit=(limit and (limit-len(ids)) or False) , context=context)) 
       #End 
      ids = list(ids) 
     if not ids: 
      ptrn = re.compile('(\[(.*?)\])') 
      res = ptrn.search(name) 
      if res: 
       ids = self.search(cr, user, [('default_code','=', res.group(2))] + args, limit=limit, context=context) 
    else: 
     ids = self.search(cr, user, args, limit=limit, context=context) 
    result = self.name_get(cr, user, ids, context=context) 
    return result 

पूरा किया लेकिन इस विशेष कार्यक्षमता के साथ समस्या यह है "यह एक वैश्विक परिवर्तन है "जहां भी आप उत्पादों को सूचीबद्ध करते हैं, तो प्रदर्शन उत्पाद का नाम होगा - भाग संख्या। यदि कोई संदर्भ विशिष्ट कार्यों के लिए बेहतर कर सकता है तो यह बहुत अच्छा होगा।

और उत्तर उत्सुकतापूर्वक स्वागत है। :)

संबंधित मुद्दे