2016-05-02 4 views
2

Ich arbeite mit Odoo ERP und ich möchte für die Rückgabe keine Wert aus der Liste der Wörterbücher von der SQL-Abfrage generieren einschränken.Einschränken, um zurückzugeben Kein Wert aus der SQL-Abfrage

form_data = self.read(cr, uid, ids, ['start_date','end_date'], context=context)[0] 
sql = "select i.date_invoice, i.number, (select name from res_partner where id=i.partner_id) as partner,i.currency_id, (select name from res_currency where id=i.currency_id) as currency, (select description from account_tax where name=t.name), t.amount, t.base, (t.amount+t.base) as total from account_invoice i, account_invoice_tax t where t.invoice_id = i.id and i.state = 'open' and i.type = 'out_invoice' and i.date_invoice >= '%s' and i.date_invoice <= '%s' order by t.name"%(form_data['start_date'],form_data['end_date']) 

cr.execute(sql) 
data = cr.dictfetchall() 

generiert Ergebnis:

data=[ 
    {'currency_id': 38, 
    'description': u'GST 7%', 
    'number': u'SAJ/2015/0021', 
    'date_invoice': '2015-05-05', 
    'currency': u'SGD', 
    'amount': 283.08, 
    'base': **None**, 
    'partner': u'partner1', 
    'total': None}, 

    {'currency_id': 38, 
    'description': **None**, 
    'number': u'SAJ/2015/0021', 
    'date_invoice': '2015-05-05', 
    'currency': u'SGD', 
    'amount': 283.08, 
    'base': 4044.0, 
    'partner': u'partner1', 
    'total': 4327.08}, 

    {'currency_id': 38, 
    'description': **None**, 
    'number': u'SAJ/2015/0020', 
    'date_invoice': '2015-05-04', 
    'currency': u'SGD', 
    'amount': 0.0, 
    'base': 3550.0, 
    'partner': u'EAST MARINE PTE LTD', 
    'total': 3550.0}, 

    {'currency_id': 38, 
    'description': **None**, 
    'number': u'SAJ/2015/0021', 
    'date_invoice': '2015-05-05', 
    'currency': u'SGD', 
    'amount': 0.0, 
    'base': 500.0, 
    'partner': u'partner1', 
    'total': 500.0}, 

    {'currency_id': 38, 
    'description': **None**, 
    'number': u'SAJ/2015/0023', 
    'date_invoice': '2015-05-05', 
    'currency': u'SGD', 
    'amount': 0.0, 
    'base': 11100.0, 
    'partner': u'partner2', 
    'total': 11100.0} 

] 

oben erzeugten Liste der Dictionary Werte gefunden, die Beschreibung und Gesamt Schlüssel Werte der obigen SQL Query mit Keine Ergebnis bekam.

Ich möchte keinen Wert, aber statt None möchte ich Zeichenfolge oder andere Leerzeichen (leere Zeichenfolge) leer.

Was soll ich tun, um die Beschränkung auf Keine Wert.?

Antwort

6

Sie müssen Nullwert mit COALESCE Postgresql-Funktion behandeln.

form_data = self.read(cr, uid, ids, ['start_date','end_date'], context=context)[0] 

sql = """ 
    select 
     i.date_invoice, 
     i.number, 
     (select name from res_partner where id=i.partner_id) as partner, 
     i.currency_id, 
     (select name from res_currency where id=i.currency_id) as currency, 
     COALESCE((select description from account_tax where name=t.name), '') as description, 
     t.amount, 
     t.base, 
     COALESCE((t.amount+t.base),0) as total 
from 
    account_invoice i, account_invoice_tax t 
where 
    t.invoice_id = i.id and 
    i.state = 'open' and 
    i.type = 'out_invoice' and 
    i.date_invoice >= '%s' 
    and i.date_invoice <= '%s' 
order by t.name 
"""%(form_data['start_date'],form_data['end_date']) 

cr.execute(sql) 
data = cr.dictfetchall() 
+0

Dank Emipro Technologies .. Ich habe auch die unterschiedliche Art und Weise für meine Lösung aus odoo Forum bekommen https://www.odoo.com/forum/help-1/question/restrict-to-return-none- value-from-the-sql-query-101452 Es kann jemandem helfen –