Ich versuche Beiträge auszuschließen, die einen Tag mit dem Namen Meta aus meiner Auswahl haben, von:Abfrage oder Ausdruck für den Ausschluss bestimmter Werte von DAL Auswahl
meta_id = db(db.tags.name == "meta").select().first().id
not_meta = ~db.posts.tags.contains(meta_id)
posts=db(db.posts).select(not_meta)
Aber diese Beiträge in meiner Auswahl zeigen noch.
Was ist der richtige Weg, um diesen Ausdruck zu schreiben?
Meine Tabellen wie folgt aussehen:
db.define_table('tags',
db.Field('name', 'string'),
db.Field('desc', 'text', default="")
)
db.define_table('posts',
db.Field('title', 'string'),
db.Field('message', 'text'),
db.Field('tags', 'list:reference tags'),
db.Field('time', 'datetime', default=datetime.utcnow())
)
Ich web2py 1.99.7 auf GAE mit High Replication Datastore auf Python 2.7.2
UPDATE:
Ich habe gerade versucht posts=db(not_meta).select()
wie von @ Anthony vorgeschlagen, aber es gibt mir ein Ticket mit der folgenden Rückverfolgung:
Traceback (most recent call last):
File "E:\Programming\Python\web2py\gluon\restricted.py", line 205, in restricted
exec ccode in environment
File "E:/Programming/Python/web2py/applications/vote_up/controllers/default.py", line 391, in <module>
File "E:\Programming\Python\web2py\gluon\globals.py", line 173, in <lambda>
self._caller = lambda f: f()
File "E:/Programming/Python/web2py/applications/vote_up/controllers/default.py", line 8, in index
posts=db(not_meta).select()#orderby=settings.sel.posts, limitby=(0, settings.delta)
File "E:\Programming\Python\web2py\gluon\dal.py", line 7578, in select
return adapter.select(self.query,fields,attributes)
File "E:\Programming\Python\web2py\gluon\dal.py", line 3752, in select
(items, tablename, fields) = self.select_raw(query,fields,attributes)
File "E:\Programming\Python\web2py\gluon\dal.py", line 3709, in select_raw
filters = self.expand(query)
File "E:\Programming\Python\web2py\gluon\dal.py", line 3589, in expand
return expression.op(expression.first)
File "E:\Programming\Python\web2py\gluon\dal.py", line 3678, in NOT
raise SyntaxError, "Not suported %s" % first.op.__name__
SyntaxError: Not suported CONTAINS
UPDATE 2:
Wie ~
arbeiten derzeit nicht auf GAE mit Datastor, ich folgende als vorübergehende Behelfslösung bin mit:
meta = db.posts.tags.contains(settings.meta_id)
all=db(db.posts).select()#, limitby=(0, settings.delta)
meta=db(meta).select()
posts = []
i = 0
for post in all:
if i==settings.delta: break
if post in meta: continue
else:
posts.append(post)
i += 1
#settings.delta is an long integer to be used with limitby
Tut mir wirklich leid @Anthony, ich vermisste '.id' in meiner Frage, obwohl ich es in meinem Code verwende. – Sathvik
Ich habe gerade 'db (not_meta) .select()' versucht, aber es gibt mir eine Fehlermeldung mit dem Hinweis ' Nicht unterstützt CONTAINS ' –
Sathvik
* Ich habe die Frage mit der Traceback aktualisiert – Sathvik