如何使参数filter()变量?

时间:2011-01-28 14:12:53

标签: python google-app-engine filter google-cloud-datastore

我有这个模型

class Item(db.Model):
    ...   
    glam = db.StringProperty()
    casual = db.StringProperty()
    speaking = db.StringProperty()

这个处理程序带有带单选按钮的表单:

class SortForm(webapp.RequestHandler):
    def get(self):
        self.response.out.write("""
            <form name="submit_form" action="/sortformhandler" method="post">
            Category: <input type="radio" name="image" value="image"> Image <br />
            Sorty by tag: <br />
            <input type="radio" name="tag" value="glam" /> Glam <br />
            <input type="radio" name="tag" value="formal" /> Formal <br />
            <input type="radio" name="tag" value="speaking" /> Speaking <br />
            <input type="submit" value="submit">
            </form>
            """)

和这个处理程序

class SortFormHandler(webapp.RequestHandler):
    def post(self):

        query = Item.all()

        query.filter("glam =", "glam")
                for item in query:
            self.response.out.write("""<a href="%s"><image src="%s" height="110">%s</a>""" % 
                                       (item.url, item.image_source_url, item.title)  )

我一直想尝试像

这样的东西
        query.filter("[self.request.get("tag")] =", [self.request.get("tag")])

这样当我在单选按钮中选择glam时,我应该

        query.filter("glam =", "glam")

但我无法做到这一点。换句话说,我试图将filter()的变量作为一个变量。有什么建议吗?

我正在尝试为图片库创建标记。感谢。

2 个答案:

答案 0 :(得分:3)

这会做你想要的:

choice = self.request.get("tag")
query.filter(choice, choice)

但是,我同意下面的Wooble。您设计它的方式,您并不真正使用glamcasualspeaking作为StringProperty,因为它们是空的或具有特定值。

您可能想要做的是拥有tag属性,该属性可以采用 glam 正式发言的不同值,...

class Item(db.Model):
    ...   
    tag = db.StringProperty()

然后你会像这样查询你的数据库:

query.filter("tag", self.request.get("tag"))

答案 1 :(得分:1)

query.filter(self.request.get("tag"), self.request.get("tag"))

实际上不需要=

但是,我还考虑使用单个StringProperty作为标记,因为看起来你的3个字符串属性基本上是布尔值,并且一次只能有一个属实。