Frage

Was die App Engine Äquivalent dieser Django Aussage wäre?

return Post.objects.get(created_at__year=bits[0], 
                            created_at__month=bits[1], 
                            created_at__day=bits[2],
                            slug__iexact=bits[3])

Ich habe das am Ende zu schreiben:

Post.gql('WHERE created_at > DATE(:1, :2, :3) AND created_at < DATE(:1, :2, :4) and slug = :5',
    int(bit[0]), int(bit[1]), int(bit[2]), int(bit[2]) + 1, bit[3])

Aber es ist ziemlich erschreckend zu Django verglichen. Jede andere mehr Pythonic / Django-magische Art und Weise, z.B. mit Post.filter() oder created_at.day/month/year Attributen?

War es hilfreich?

Lösung

Sie haben keine ‚relativedelta‘ müssen - was Sie beschreiben ein datetime.timedelta ist. Ansonsten Ihre Antwort sieht gut aus.

Was die Verarbeitungszeit geht, ist das schöne an App Engine, dass fast alle Anfragen haben die gleichen Kosten-pro-Ergebnis - und alle von ihnen skaliert proportional zu den Datensätze zurückgegeben, nicht der gesamte Datenspeicher Größe. Als solche Ihre Lösung funktioniert gut.

Alternativ, wenn Sie Ihre ein Ungleichheitsfilter für etwas anderes brauchen, könnten Sie ein ‚created_day‘ DateProperty hinzufügen und machen eine einfache Gleichheitsprüfung auf das.

Andere Tipps

Wie wäre es

from datetime import datetime, timedelta

created_start = datetime(year, month, day)
created_end = created_start + timedelta(days=1)
slug_value = 'my-slug-value'

posts = Post.all()
posts.filter('created_at >=', created_start)
posts.filter('created_at <', created_end)
posts.filter('slug =', slug_value)

# You can iterate over this query set just like a list
for post in posts:
    print post.key()

am Ende mit der relativedelta Bibliothek + die Filter in jQuery Stil verketten, die zwar nicht zu Pythonic noch ein bisschen ist bequemer zu schreiben und viel trockener. :) Immer noch nicht sicher, ob es der beste Weg, es zu tun, wie es wahrscheinlich mehr Datenbank Verarbeitungszeit benötigen wird?

date = datetime(int(year), int(month), int(day))
... # then
queryset = Post.objects_published()
                            .filter('created_at >=', date)
                            .filter('created_at <', date + relativedelta(days=+1))
                            ...

und Weitergabe slug zum object_detail Ansicht oder noch einen anderen Filter.

Durch die Art und Weise könnte man die datetime.timedelta verwenden. Das können Sie Datumsbereiche oder Datum Deltas finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top