Pour interroger la base d'un mois, je vous suggère d'ajouter un champ dérivé supplémentaire à votre modèle qui est mis à jour automatiquement lorsque l'objet est enregistré:
class BaseArticleModel(polymodel.PolyModel):
title = db.StringProperty()
created_at = db.DateProperty(auto_now_add=True)
updated_at = db.DateProperty(auto_now=True)
# will be auto-generated
created_at_month = db.IntegerProperty()
def put(self, *args, **kwargs):
self.created_at_month = self.created_at.month
super(BaseArticleModel, self).put(*args, **kwargs)
Modifier: relisant votre question, il semble que vous ne cherchez pas vraiment pour tous les messages d'un mois donné (par exemple Octobre de chaque année), mais plutôt seulement les messages en un seul mois. Si tel est le cas, alors vous devriez être en mesure de réviser simplement votre requête à une simple comparaison:
# get News posted in April, 2011
all_news = News.all()
all_news.filter('created_at >=', datetime(2011, 4, 1))
all_news.filter('created_at <', datetime(2011, 5, 1))
Edit # 2: As noted by Nick below, outrepassant put()
serait mauvaise forme, car il ne serait efficace que lorsqu'il a été invité une méthode liée, et ne fonctionnera pas avec db.put()
ou d'autres façons d'enregistrer dans le magasin de données.
Ne pas passer outre mis à définir les propriétés - vente est appelée que si vous l'appelez directement - si, par exemple, 'db.put (myInstance)' ne parviendra pas à le mettre à jour. –