Как сделать аргумент для filter () переменной? - PullRequest
0 голосов
/ 28 января 2011

У меня есть эта модель

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 ]

3 голосов
/ 28 января 2011

Будет ли это делать то, что вы ищете:

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

Однако я согласен с Вублом ниже. Таким образом, вы не используете glam, casual, speaking как StringProperty, поскольку они либо пусты, либо имеют определенное значение.

То, что вы, вероятно, хотите сделать, - это иметь свойство tag, которое может принимать различные значения от глэм , формальный , говорящий , ...

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

И тогда вы бы запросили свою базу данных следующим образом:

query.filter("tag", self.request.get("tag"))
1 голос
/ 28 января 2011
query.filter(self.request.get("tag"), self.request.get("tag"))

= фактически не требуется.

Однако я бы также рассмотрел возможность использования одного StringProperty для тега, поскольку кажется, что ваши 3 строковых свойства по существу являются логическими, и только одно из них может быть истинным одновременно.

...