2016-12-06 1 views
0

J'ai ce morceau de code qui récupère un identifiant d'une équipe de vente si la personne est dans une, sinon elle renvoie None.Lambda qui cause AttributeError

class AccountInvoice(models.Model): 
    _inherit = 'account.invoice' 

    xx_section_id = fields.Many2one('crm.case.section', string='Invoice template', required=True, 
           default=lambda self: self._get_sales_team()) 

    @api.model 
    def _get_sales_team(self): 
     ids = self.env['crm.case.section'].search([('member_ids', 'in', self._uid)]) 
     if len(ids) != 1: 
      # Has no sales team or more than one 
      return None 
     return ids[0] 

Pour une raison quelconque, cela fonctionne dans mon environnement local mais pas sur le serveur. L'erreur se produit lorsque j'essaie d'installer le module. Le serveur me donne l'erreur suivante:

AttributeError: 'NoneType' object has no attribute 'id' 

Et dans l'exploitation forestière, il déclare:

2016-12-06 19:39:06,662 2005 ERROR None openerp.http: Exception during JSON request handling. 
Traceback (most recent call last): 
    File "/Users/glenn/Documents/Work/odoo80_vzwwebcrm_tst/openerp/http.py", line 537, in _handle_exception 
    return super(JsonRequest, self)._handle_exception(exception) 
    File "/Users/glenn/Documents/Work/odoo80_vzwwebcrm_tst/openerp/http.py", line 1415, in _dispatch_nodb 
    func, arguments = self.nodb_routing_map.bind_to_environ(request.httprequest.environ).match() 
    File "/Users/glenn/.virtualenvs/odoo8/lib/python2.7/site-packages/werkzeug/routing.py", line 1430, in match 
    raise NotFound() 
NotFound: 404: Not Found 

Qu'est-ce que je fais mal?

+0

Étant donné la façon dont xx_section_id est nommé, il semblerait qu'il est censé être un id. Mais si _get_sales_team renvoie None ...? Se pourrait-il que cette condition soit signalée d'une manière ou d'une autre? –

+0

@BillBell Returning Aucun type n'est utilisé pour marquer l'absence d'une valeur, il reste vide lors du renvoi None – RandomPerson

Répondre

0

Pour le cas len (ids) == 0, le script essaie de 'return ids [0]'.

En fonction de la valeur du résultat des « ids », vous dervait être:

ou

if len(ids) > 0: 
+0

Il n'accepte qu'un seul, d'où le contrôle de condition sinon égal – RandomPerson