2016-10-19 3 views
0

私はappengineでブログをやっています。カテゴリごとの投稿数を取得するためのクエリを作成する必要があります。だから、私はappengineのReferenceプロパティでフィルターが必要です。私の実際のコードを見てください。Appnengineの参照プロパティでフィルタ

それらは私のモデルです:

class Comment(db.Model) : 
    user = db.ReferenceProperty(User) 
    post = db.ReferenceProperty(Blog) 
    subject = db.StringProperty(required = True) 
    content = db.TextProperty(required = True) 
    date = db.DateProperty(auto_now_add = True) 
    last_modified = db.DateProperty() 
    status = db.BooleanProperty(default = True) 

class Category(db.Model): 
    name = db.StringProperty() 
    date = db.DateProperty(auto_now_add=True) 

class Blog(db.Model) : 
    subject = db.StringProperty(required = True) 
    content = db.TextProperty(required = True) 
    date = db.DateProperty(auto_now_add = True) 
    category = db.ReferenceProperty(Category) 
    user = db.ReferenceProperty(User) 
    last_modified = db.DateProperty(auto_now = True) 
    status = db.BooleanProperty() 
    likes = db.IntegerProperty(default = 0) 
    users_liked = db.ListProperty(db.Key, default = []) 
    dislikes = db.IntegerProperty(default = 0) 
    users_disliked = db.ListProperty(db.Key, default = []) 

そして、これは私のクエリです:

def numcomments_all_category() : 
    dic = {} 
    category = get_category() 
    for cat in category : 
     dic[cat.key().id()] = Comment.all().filter("post.category =", cat.key()).ancestor(ancestor_key).count() 
    return dic 

しかし、それは、フィルタ( "post.category ="、cat.key())ではないようですこれを行う正しい方法。

+1

サイドノート:DBクライアント・ライブラリが取って代わられ、それは非常に代わりNDBクライアントライブラリを使用することをお勧めします: https://cloud.google.com/appengine/docs/python/datastore/api-overview –

答えて

0

私はしばらくdb使用していないが、私はこのような何かがうまくいくと思う:

count = 0 
# Get all blogs of the desired category 
blogs = Blog.all().filter("category =", cat.key()) 
for blog in blogs: 
    # For each blog, count all the comments. 
    count += Comment.all().filter("post =", blog.key()).count() 
+0

の強調表示された注釈を参照してくださいありがとうございます、それは動作します:-) –

関連する問題