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