2009-03-21 15 views
1

私がしたいことは、ページを保持するミニCMSを構築することです。なぜGQLクエリが一致しないのですか?

私のurls.pyの最後のルートは、現在のリクエストと同じuriで利用可能なページがあるかどうかをチェックし、もしあればそのページを表示する、私のviews.pyの関数を指しています。

私はモデルがあります:私の見解では

class Page(db.Model): 
    title = db.StringProperty(required=True) 
    uri = db.TextProperty(required=True) 
    created = db.DateTimeProperty(auto_now_add=True) 
    modified = db.DateTimeProperty(auto_now=True) 
    content = db.TextProperty() 

def show(request): 
    page = db.GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get() 
    if page is None: 
    return http.HttpResponseNotFound() 
    else: 
    return respond(request, 'pages_show', {'content': request.path}) 

をそして私は、データストアへのURIとして '/仕事' でエンティティを追加しました。

request.pathが正確に '/ work'であっても、クエリは一致を返しません。

アドバイスいただきありがとうございます!

はい、私はPythonのnoobです、App Engineは最終的に言語を学ぶのにぴったりです。

答えて

4

私は解決策を見つけました!

問題はモデルにあります。

アプリケーションエンジンdatastoreはTextPropertyをインデックスに登録しません。その型を使用するのは当初から間違っていたので、インデックスを取得するStringPropertyに変更し、WHERE句で使用できるデータストアを指定しました。作業モデルの

例:

class Page(db.Model): 
     title = db.StringProperty(required=True) 
     // string property now 
     uri = db.StringProperty(required=True) 
     created = db.DateTimeProperty(auto_now_add=True) 
     modified = db.DateTimeProperty(auto_now=True) 
     content = db.TextProperty() 
+2

実際にはuriプロパティはまったく必要ありません。 key_nameがURIと等しいページエンティティを作成した場合、Page.get_by_key_name(uri)を使用してページエンティティを検索すると、一意性が無料になります! –

+0

偉大なアイデアクモ形。私はあなたのヒントのために+1したい:-)ありがとう! –

+0

ありがとうございます。私は同じことをやっていて、なぜクエリがうまくいかないのか理解できませんでした。あなたの記事は私を狂わせから救った。 – ibiza

2

名前付きキーワード引数( "uri =:uri")を使用する場合、明示的に名前付きキーワードにパラメータをバインドする必要があります。代わりに:

# incorrect named parameter 
GqlQuery('SELECT * FROM Page WHERE uri=:uri', request.path).get() 

あなたは

# correct named parameter 
GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get() 

をしたいか、あなただけの位置パラメータを使用することができます。

# correct positional parameter 
GqlQuery('SELECT * FROM Page WHERE uri=:1', request.path).get() 
+0

はい、私は間違った例を提供します。名前付きパラメータまたは位置パラメータを使用しても、私は同じ結果を得ます。サンプルを修正しました。ありがとう! –

関連する問題