2017-09-14 2 views
-1

Ich versuche eine Tabelle auszuwählen, in der ein bestimmter Wert in einem Referenzfeld nicht vorhanden ist. Ist es möglich, die contains() -Methode zu negieren?Kann web2py Liste enthält() negiert werden?

grid = SQLFORM.smartgrid(db.redaktion.projekt.contains(projektid) 

Antwort

0

Der Negationsoperator in pyDAL Abfragen ist ~. Außerdem muss das erste Argument von smartgrid ein Table sein anstatt ein Query. Verwenden Sie das Argument constraints, um eine Abfrage auf eine bestimmte Tabelle anzuwenden. So würde es sein:

grid = SQLFORM.smartgrid(db.redaktion, 
    constraints={'redaktion': ~db.redaktion.projekt.contains(projektid)}) 

Siehe http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Logical-operators.

+0

danke @Anthony, es scheint jetzt, dass Abfragen mit anderen Tabellen als Raster wählt, dh "SQLFORM.smartgrid (db.redaktion)", führen zu einem 'Attribut Fehler: ' Abfrage 'Objekt hat kein Attribut' _tablename ' ' – lebigmac

+0

Okay, die Antwort gefunden: SQLFORM.grid (Abfrage) OK SQLFORM.smartgrid (Tabelle) OK SQLFORM.smartgrid (Abfrage) WRONG! SQLFORM.smartgrid (Tabelle, Einschränkungen = {'Tabellenname': Abfrage}) OK – lebigmac

+0

Richtig, ich habe gerade Ihren Code kopiert und das 'Smartgrid' vs.' Grid' verpasst. Ich habe die Antwort aktualisiert, um den richtigen Code wiederzugeben. – Anthony