2016-06-22 15 views
0

alleTypeerror: 'int' Objekt ist nicht iterable in odoo

ich Fehler empfangen, wenn Daten in Tabelle hinzufügen:

2016-06-22 12:14:59,292 21364 ERROR odoov8 openerp.addons.webvisitorcalc.controllers: prevouseURLsearchEngine: {'search_marker': u'q', 'id': 1, 'uniq_part_in_host': u'google'} 
2016-06-22 12:14:59,292 21364 ERROR odoov8 openerp.addons.webvisitorcalc.controllers: search_engine_id: 1 
2016-06-22 12:14:59,293 21364 ERROR odoov8 openerp.http: Exception during JSON request handling. 
Traceback (most recent call last): 
    File "/home/skif/odoo/openerp/http.py", line 540, in _handle_exception 
    return super(JsonRequest, self)._handle_exception(exception) 
    File "/home/skif/odoo/openerp/http.py", line 577, in dispatch 
    result = self._call_function(**self.params) 
    File "/home/skif/odoo/openerp/http.py", line 313, in _call_function 
    return checked_call(self.db, *args, **kwargs) 
    File "/home/skif/odoo/openerp/service/model.py", line 118, in wrapper 
    return f(dbname, *args, **kwargs) 
    File "/home/skif/odoo/openerp/http.py", line 310, in checked_call 
    return self.endpoint(*a, **kw) 
    File "/home/skif/odoo/openerp/http.py", line 806, in __call__ 
    return self.method(*args, **kw) 
    File "/home/skif/odoo/openerp/http.py", line 406, in response_wrap 
    response = f(*args, **kw) 
    File "/home/skif/odoo/my-modules/webvisitorcalc/controllers.py", line 179, in register_session 
    writeRelationSession.write({'search_engine_id':int(1)}) 
    File "/home/skif/odoo/openerp/api.py", line 266, in wrapper 
    return new_api(self, *args, **kwargs) 
    File "/home/skif/odoo/openerp/models.py", line 3788, in write 
    self._write(old_vals) 
    File "/home/skif/odoo/openerp/api.py", line 266, in wrapper 
    return new_api(self, *args, **kwargs) 
    File "/home/skif/odoo/openerp/api.py", line 592, in new_api 
    result = method(self._model, cr, uid, self.ids, *args, **old_kwargs) 
    File "/home/skif/odoo/openerp/models.py", line 3816, in _write 
    for wtuple in vals[field]: 
TypeError: 'int' object is not iterable 

Wie kann ich undestend diese Beziehung Fehler ist. Andere Beziehung funktioniert gut.

Meine Modelle Datei: [models.py]

class SessionVisitor(models.Model): 
     _name = 'webvisitorcalc.session_visitor' 
     client_addr = fields.Char(string="Client IP", required=True) 
     date_visit = fields.Datetime(default=fields.Datetime.now()) 
     date_last_check = fields.Datetime(default=fields.Datetime.now()) 

     target_url_ids = fields.Many2one('webvisitorcalc.url_list', string='Target URL') 

     site_trip_id = fields.One2many('webvisitorcalc.site_trip', 'session_ids', string='Trip records') 

     #search 
     search_engine_id = fields.One2many('webvisitorcalc.search_engine', 'session_ids', string='Search engine') 
     search_phrase_id = fields.One2many('webvisitorcalc.search_phrases', 'session_ids', string='Search phrase') 

     # advert 
     advert_company_id = fields.One2many('webvisitorcalc.advert_company', 'session_ids', string='Advert. company') 
     advert_engine_id = fields.One2many('webvisitorcalc.advert_engine', 'session_ids', string='Advert. engine') 


class SearchEngine(models.Model): 
     _name = 'webvisitorcalc.search_engine' 
     name = fields.Char(string="Engine name", required=True) 
     uniq_part_in_host = fields.Char(string="Uniq part hostname", required=True) 
     search_marker = fields.Char(string="marker for search phrase", required=True) # q='' для Google, text='' для Яндекс 
     #utm_marker = fields.Char(string="UTM mark name", required=True) 
     #url_list_ids = fields.Many2one('webvisitorcalc.url_list', string='Target URL') 
     session_ids = fields.Many2one('webvisitorcalc.session_visitor', string='Session IDs') 

Dies ist Code mit Fehler: [controllers.py]

createParam = {} 
if (prevouseURLsearchEngine!={}): 
       _logger.error("prevouseURLsearchEngine: %r", prevouseURLsearchEngine) 
       _logger.error("search_engine_id: %r", prevouseURLsearchEngine['id']) 
       createParam['search_engine_id'] = int(prevouseURLsearchEngine['id']) 
       writeRelationSession.write(createParam) 

Können Sie meine Fehler vorschlagen?

+0

Aus dem Stack-Trace sieht es aus wie 'Vals [Feld]' ist ein Int. Was erwartest du davon? – nbryans

+0

Dieses Feld lautet: search_engine_id (Klasse SessionVisitor). Dies ist die Beziehung SessionVisitor <-> SearchEngine. Ich schreibe in dieses Feld ID Engine Maschine für Besucher Sitzung, die von Google oder Yandex ging. – Skif

+0

Versuchen Sie dies in der Linie der search_engine_id: CreateParam [ 'search_engine_id' = [int (prevouseURLsearchEngine [ 'id'])] – dccdany

Antwort

0

Hier ist, was ich versuchen würde:

createParam = {} 
if prevouseURLsearchEngine: 
    _logger.error("prevouseURLsearchEngine: %r", prevouseURLsearchEngine) 
    _logger.error("search_engine_id: %r", prevouseURLsearchEngine['id']) 
    # the search_engine field is a `OneToMany` so we are expecting an array not a scalar 
    createParam['search_engine_id'] = [ int(prevouseURLsearchEngine['id']) ] 
    writeRelationSession.write(createParam) 
+0

Ich bekam ein weiterer Fehler: * Datei "/home/skif/odoo/my-modules/webvisitorcalc/controllers.py", Zeile 179, in __register_session writeRelationSession.write (createParam) __ * und * Datei "/ home/skif/odoo/openerp /models.py ", Zeile 3932, in _write Ergebnis + = self._columns [Feld] .set (cr, self, ID, Feld, Vals [Feld], Benutzer, Kontext = rel_context) oder [] Datei"/home/skif/odoo/openerp/osv/fields.py ", Zeile 796, im Set wenn act [0] == 0: __TypeError: 'int' Objekt hat kein Attribut '___ _getitem ____'__ * – Skif

+0

Kann ich Fehler in Beziehung haben? Ich möchte ID von SearchEngine-Modell zu Model SessionVisitor schreiben. Für alle Record SessionVisitor search_engine_id nicht uniq und dies muss eine numerische sein. Alle Datensätze können gleiche Daten haben. Ich denke in SearchEngine muss * session_ids = fields.Many2one ('webvisitorcalc.session_visitor', string = 'Session IDs') * sein und in SessionVisitor muss * search_engine_id = fields.One2many ('webvisitorcalc.search_engine', 'session_ids', string = 'Suchmaschine') *. Habe ich recht? – Skif

0

Dank alle für Antworten. Ich habe falsche Beziehungen geschrieben. Beziehungen in meinen Klassen müssen Wechselorte sein.