Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
3 Trả lời
10787 Lượt xem

Am trying to prevent selecting of the same value in one2many field, when the 'select an item' button is clicked .For example when trying to select the same product that has been already selected in sale order.

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

I have done the same requirement in my project. I restricted duplication of product addition at o2m in sales form. (v7)

sale.py

 def onchange_one2many(self, cr, uid, ids, order_line):

mylist = []

if order_line != []:

    for line in order_line:

        for loop in line:

            if isinstance(loop, dict):

                mylist.append(loop['product_id'])

if len(mylist) != len(set(mylist)):

    raise osv.except_osv(_('Warning'),_('Product Should be Unique'))

return True

.xml

<field name="order_line" on_change="onchange_one2many(order_line)" />

Thanks Rifakat Haradwala

Note: Correct me if anyone has better answer

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

you can get the idea by this code .... just get unique ids of each many2one field ...in my case i had 2...


def onchange_line_course(self):

lists_course=self.courselines.mapped('field1.id')
lists_assesment=self.courselines.mapped('field2.id')
for rec in lists_assesment:
for crs in lists_course:
record_count = self.courseline.filtered(lambda rex: rex.course.id == crs and rex.assessment.id == rec)

if len(record_count) >1:
print(cannot select duplicate values


if you have only one many2one filed then only one for loop would be required
Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi,

Well you need specific development for that. It's not something you could configure.

You need to override write() of the main model and in write() you can iterate on the IDs of o2m field and put a check on the Product if it repeats and raise warning. Write() will be called when you save main form, so you won't be notified while you actually inserting line items. I am not sure onchange of o2m field would help because ID of newly inserted line item is not yet created while you add it, but you can give it onchange(o2m) also try.

Regards,

Ảnh đại diện
Huỷ bỏ
Bài viết liên quan Trả lời Lượt xem Hoạt động
2
thg 5 19
4161
0
thg 5 16
4792
1
thg 3 15
5209
1
thg 3 23
2284
0
thg 12 22
2919