跳至内容
菜单
此问题已终结
1 回复
23968 查看
Traceback (most recent call last):
  File "/home/tom/odoo/odoo-server/odoo/addons/base/models/qweb.py", line 344, in _compiled_fn
    return compiled(self, append, new, options, log)
  File "<template>", line 1, in template_741_43
AttributeError: 'NoneType' object has no attribute 'get_state_count'



my code
<div class="card text-white bg-primary"> <div class="card-body"> <div class="stat-widget-one"> <div class="stat-content dib"> <div class="stat-text">Quatation</div> <div class='stat-digit'> <t t-esc="sale.get_state_count()"/> </div> </div> </div> </div> </div>



# -*- coding: utf-8 -*- from odoo import api, fields, models, _ class SaleOrder(models.Model): _inherit = 'sale.order' @api.multi def get_state_count(self): count = len(self.env['sale.order'].search([('state','=','draft')]).ids) print("\n\n\n\n",count) return count please help
thanks in advance
形象
丢弃
最佳答案

Hi Geo,

You should remove the @api.multi. Because of the @api.multi decorator Odoo cannot find your function. Are you inheriting the default existing report in Odoo? Because then you should not use "sale.get_sale_count()" but "doc.get_sale_count()" as Odoo uses doc as variable in this report. An example in XML:

<t t-set="state_count" t-value="doc.get_state_count()"/>
<span t-esc="state_count"/>

An example in Python:

    def get_state_count(self):
        count = len(self.env['sale.order'].search([('state','=','draft')]).ids)
        return count

Regards,
Yenthe

形象
丢弃

Exactly which report are you inheriting and modifying? Are you not defining the variables? Perhaps it is nice to add more code to your initial question so we can see the whole XML.

编写者

actually its not report

controller

from odoo import http

from odoo.http import request

from odoo.addons.sale.controllers.onboarding import OnboardingController # Import the class

class CustomOnboardingController(OnboardingController): # Inherit in your custom class

@http.route('/sales/sale_quotation_onboarding_panel', auth='user', type='json')

def sale_quotation_onboarding(self):

#res = super(CustomOnboardingController, self).sale_quotation_onboarding()

company = request.env.user.company_id

return {

'html': request.env.ref('sale_notify.sale_quotation_notify').render({

'company': company,

'state': company.get_and_update_sale_quotation_onboarding_state()

})

}

xml

<?xml version="1.0" encoding="utf-8"?>

<odoo>

<template id="sale_quotation_notify" name="sale.quotation.notify">

<div class="row">

<div class ="col-5">

<div class="row">

<div class ='col'>

<!-- <div class="stat-digit">

<t t-set="count" t-value='sale.get_state_count()'/>

</div> -->

<t t-set="state_count" t-value="sale.get_state_count()"/>

<div class="card text-white bg-primary">

<div class="card-body">

<div class="stat-widget-one">

<div class="stat-content dib">

<div class="stat-text">Quatation</div>

<div class='stat-digit'>

<t t-esc="state_count"/>

</div>

</div>

</div>

</div>

</div>

</div>

<div class ='col'>

<div class="card text-white bg-primary">

<div class="card-body">

<div class="stat-widget-one">

<div class="stat-content dib">

<div class="stat-text">Quatation Sent</div>

</div>

</div>

</div>

</div>

</div>

<div class ='col'>

<div class="card text-white bg-primary">

<div class="card-body">

<div class="stat-widget-one">

<div class="stat-content dib">

<div class="stat-text">Sale Order</div>

</div>

</div>

</div>

</div>

</div>

<div class ='col'>

<div class="card text-white bg-primary">

<div class="card-body">

<div class="stat-widget-one">

<div class="stat-content dib">

<div class="stat-text">Cancel</div>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

</template>

</odoo>

python

# -*- coding: utf-8 -*-

from odoo import api, fields, models, _

class SaleOrder(models.Model):

_inherit = 'sale.order'

def get_state_count(self):

count = len(self.env['sale.order'].search([('state','=','draft')]).ids)

print("\n\n\n\n",count)

return count

thanks for your consider

Hmm interesting. I assume that because you call it from the controller with a render that it works a bit different. I have no modules that look like this to test with & I haven't done this requirement for now I'm afraid. Let's see if somebody else can give you a good solution for this.