Frage

Ich habe folgte meist ein Tutorial, wie man ein gustbook mit GAE und Python zu bauen. Jetzt möchte ich nur die Einträge aus einem bestimmten Tag zeigen, aber die GQL Abfrage gibt nichts zurück (obwohl es Einträge von diesem Tag):

class Shout(db.Model):  
    message= db.StringProperty(required=True)  
    when = db.DateTimeProperty(auto_now_add=True)  
    who = db.StringProperty()  

class MainHandler(webapp.RequestHandler):  
    def get(self):  
        shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')")  
        # Return something without the WHERE clause
        values = {'shouts':shouts}  
        self.response.out.write(template.render('main.html',values))  

    def post(self):  
        self.response.out.write("posted")  
        shout = Shout(message=self.request.get("message"),who=self.request.get("who"))  
        shout.put()  

Das ist mein main.html:

<form method="post">
   <input type="text" name="who"></input>
   <input type="text" name="message"></input>
   <input type="submit" value="Send"> </input>  
</form>

{% for shout in shouts  %}
   <div>{{shout.message}} from {{shout.who}} on {{shout.when}}</div>
{% endfor %}
War es hilfreich?

Lösung

Es könnte ein weiterer Weg, um dieses, aber ich denke, dass, weil Ihr when Eigenschaft ist ein Datetime Sie würde besser mit so etwas wie dies serviert werden:

shouts = db.GqlQuery("""SELECT * 
                          FROM Shout 
                         WHERE when >= DATE('2010-11-05')
                           AND when < DATE('2010-11-06')""")

Andere Tipps

Versuchen Sie diese:

shouts = db.GqlQuery("SELECT * FROM Shout WHERE when=DATE('2010-11-05')").fetch(5000)

Es ist zwar möglich, ein Abfrage-Objekt als iterable zu verwenden, ist es eine bessere Idee, um explizit die Zeilen zu holen und hängt nicht von der for in Ihrer Vorlage die Arbeit zu tun. Ich vermute, dass es nicht auf diese Weise unterstützt wird.

EDIT: Nun, da ich genauen Blick auf diese, wie ich vermute, dass das Problem ist, dass das Feld, das Sie abfragen auf ein DateTimeProperty ist, und durch den DATE-Operator, Sie sind im Wesentlichen sagen, dass Sie wollen 2010-11-05 00.00.00 , und es gibt keine Datensätze mit genau diesem Datum und Zeit, versuchen Sie so diese statt:

shouts = db.GqlQuery("SELECT * FROM Shout WHERE when >= DATETIME('2010-11-05 00:00:00') and when <= DATETIME('2010-11-05 23:59:59')")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top