Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
2 Odpowiedzi
30663 Widoki

I have added an extra field which relates to the project.project model in the sale order

class InheritSaleOrder(models.Model):
_inherit = 'sale.order'

project_name = fields.Many2one(comodel_name="project.project", string="Project Name", required=False)

i also have a customized module for project budget which is supposed  to automatically pick the all the products in the sale order line relating to a specific order using onchange here is my function

@api.multi
@api.onchange('project_id')
def change_project_id(self):
#get quotation id
quotation_id = self.project_id

if(quotation_id!=""):

#get quotation info
quotation_list = self.env['sale.order'].search([('project_name','=',quotation_id.id)])
data = {}
#loop through quotation lines
new_lines = self.env['project.budget.line']
for line in quotation_list.order_line: #line 83
##populate items
data = {
'product_id': line.product_id.id,
'product_categ_id':line.product_categ_id,
'product_qty':line.product_uom_qty ,
'product_uom' : line.product_uom.id ,
'price_unit': line.product_id.standard_price #TODO - Use the pricelist to retrieve item prices
}
new_line = new_lines.new(data) #adding new items to the model
new_lines += new_line
#self.update('reference_bq' : value)
self.budget_line_items += new_lines # set budget lines
return {}
#return vals

# on change update lines

however when i try to run my code i get a singleton error i dont know what am missing kindly assist

File "/home/dishon/Desktop/odoo-dev/todo_app/project_budget/models/models.py", line 83, in change_project_id
    for line in quotation_list.order_line:
  File "/home/dishon/Desktop/odoo-dev/odoo/odoo/fields.py", line 909, in __get__
    record.ensure_one()
  File "/home/dishon/Desktop/odoo-dev/odoo/odoo/models.py", line 4848, in ensure_one
    raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: sale.order(23, 22, 21)


Awatar
Odrzuć
Najlepsza odpowiedź

Hi,

This error occurred because you are trying to access multiple records list.

The error is from this line:

for line in quotation_list.order_line:

because quotation_list  has sale.order(23, 22, 21) records so you have to put one more for loop in quotation_list


So your code should be:


@api.multi

@api.onchange('project_id')

def change_project_id(self):

    #get quotation id

    quotation_id = self.project_id


    if(quotation_id!=""):


        #get quotation info

        quotation_list = self.env['sale.order'].search([('project_name','=',quotation_id.id)])

        data = {}

        #loop through quotation lines

        new_lines = self.env['project.budget.line']

        for quotation in quotation_list: #line 83

            for line in quotation.order_line:

                ##populate items

                data = {

                    'product_id': line.product_id.id,

                    'product_categ_id':line.product_categ_id,

                    'product_qty':line.product_uom_qty ,

                    'product_uom' : line.product_uom.id ,

                    'price_unit': line.product_id.standard_price #TODO - Use the pricelist to retrieve item prices

                }

                new_line = new_lines.new(data) #adding new items to the model

                new_lines += new_line

        #self.update('reference_bq' : value)

        self.budget_line_items += new_lines # set budget lines

        return {}

    #return vals


    # on change update lines

Awatar
Odrzuć
Autor

Thanks its working now

Najlepsza odpowiedź

hello

in your code, at somewhere you get the multiple records and from that you try access the field.

for eg. into your code you get multiple records into the variable quotation_list. and into the for loop you directly

access the order_line. that's why you get an error.

try like below code:

for quotation in quotation_list:

    for line in quotation.order_line: # made this change in line 83 and add above for loop into your code.

        # your code here

        ##populate items

 

I hope may this will helps you.

Awatar
Odrzuć
Autor

Thanks Mitul Shingala its working right

Powiązane posty Odpowiedzi Widoki Czynność
0
paź 22
2002
0
maj 20
3579
3
lip 18
5741
1
lip 18
7481
0
maj 18
5155