8

私は次のモデルでsqlalchemyを使用しています

class Page(db.Model):
     id= ..
     posts = db.relationship('Post', lazy='dynamic')

class Post(db.Model):
   id=..
   page_id=..
   author= db.Column(db.String)
   date= db.Column(db.DateTime)

Pageクラスには、特定の日付と作成者のページの投稿を取得するメソッドがあります。次のようになります。

def author_posts(author, start_date=None, end_date=None):
    p= self.posts.filter(Post.author == author)

    if start_date:
       p.filter(Post.date >= start_date)

    if end_date:
       p.filter(Post.date <= end_date)

    return p

問題は、関数に開始日と終了日が指定されている場合でも、作成者によってフィルタリングされた投稿が返されるが、dates引数によっては返されないことです。

それを行う正しい方法は何ですか?

編集:生成されたクエリ

SELECT post.id AS post_id, post.page_id AS post_page_id, post.author AS post_author ... FROM post WHERE post.author = ?
4

1 に答える 1

11

filter()新しいクエリオブジェクトを返しますが、保存しません。p毎回結果に置き換えます。

if start_date:
   p = p.filter(Post.date >= start_date)

if end_date:
   p = p.filter(Post.date <= end_date)

return p
于 2012-09-20T17:23:44.743 に答える