2017-08-28 1 views
0

Ich möchte die Gesamtzahl der Datensätze auf dem Bildschirm zeigen. Dafür habe ich die Abfragesprache für die Funktion geschrieben und ich bekomme das Wunschergebnis auf dem Ubuntu 14.04 Befehlszeilenbildschirm, indem ich diesen Wert aus dem Python-Code drucke. Aber wenn ich diesen Wert in der Funktion zurückgebe, dann zeigt es mir Fehler Popup-Meldung "TypeError: 'int' Objekt ist nicht iterierbar". Also, jeder kann mir die richtige Lösung für dieses Problem geben. Mein Python-Code für Funktion und Feld ist unten.'Int' Wert ist keine Rückgabe in Funktion für odoo 8

Python-Code:

def get_count(self, cr, uid, ids, sequence, arg, context=None): 
    cr.execute('SELECT count(*) from sun_helpdesk') 
    u_data = cr.fetchall() 
    print "cr:", u_data 
    print "res:",int(u_data[0][0]) 
    return int(u_data[0][0]) 

_columns = { 
    'sequence': fields.function(get_count, method=True, string='Total Tickets', type='integer'), 
} 

XML-Code: In XML hat dieses Feld einfach.

Ergebnis auf dem Ubuntu-Screen ist:

cr: [(101L,)] 

res: 101 

new_values = dict(values) 

TypeError: 'int' object is not iterable 
+0

Was ist 'values' in' new_values ​​= dict (values) '? – quamrana

+0

Entfernen Sie 'int' von' int (u_data [0] [0]) 'und testen Sie es. Ich schätze, was du bekommst, ist ein Tupel und dann versuchst du, es zu einem Int zu machen. – 0decimal0

Antwort

1

Sie benötigen einen dict zurückzukehren, die ihre Schlüssel-IDs sind zum Beispiel:

def get_count(self, cr, uid, ids, sequence, arg, context=None): 

    res = {} 

    cr.execute('SELECT count(*) from sun_helpdesk') 
    u_data = cr.fetchall() 
    print "cr:", u_data 
    print "res:",int(u_data[0][0]) 

    #res[id] must be set to False and not to None because of XML:RPC 
    # "cannot marshal None unless allow_none is enabled" 
    res[ids[0]] = int(u_data[0][0]) if ids else False 
    return res 

Werfen Sie einen Blick auf Function field

+0

Danke ... !! Es funktioniert. –