Aktywne Wpisy

wjtk123 +240
Słucham Państwa, komu się Polska nie podoba i chciałby ponownie wziąć udział w narodzinowej loterii? xD
#polska #swiat #mapa #ciekawostki #statystyka
#polska #swiat #mapa #ciekawostki #statystyka
źródło: IMG_9995
Pobierz
nervous_breakdown +836
Ciekawostka: zespół Pectus istnieje tylko po to, aby występować w telewizji śniadaniowej, opowiadać o tym, że są braćmi i że w tym roku na święta będą lepić pierogi
#muzyka #ciekawostki
#muzyka #ciekawostki
źródło: 000LM014IOUC5MT8-C322-F4
Pobierz




Mirki, chcę na serwerze odpalać periodic task, który co x minut będzie odpytywał model i sprawdzał czy są w nim maile do wysłania.
Całą resztę ogarnąłem ale mam problem do stworzenia odpowiedniego query w managerze, który ma działać w następujący sposób:
1) w managerze określam aktualną datę(currentdate)
2) w zależności od rodzaju emaila, wybieram okres, po którym ma zostać wysłany(delta) - ponieważ te okresy są dynamiczne, musi być to liczone od aktualnej daty)
3) jeżeli minął określony przeze mnie okres, queryset ma zwrócić te obiekty
Poniżej wrzucam prove of concept, które wywala się oczywiście na tym kawałku
((currentdate - F('created_at')).seconds
dalej wywali się też na delta > 0 ale tak jak mówię, to tylko prove of concept
delta = 60 * 1 * 5
currentdate = timezone.now()
qs = self.annotate(passed=((currentdate - F('created_at')).seconds // delta > 0)).filter(passed=True)
nie wiem czy nie próbuję tego przekombinować trochę, anyway, za każdą poradę będę wdzięczny
AttributeError: 'CombinedExpression' object has no attribute 'seconds'
((currentdate - F('createdat')).seconds nie ewaluuje się do datetime.timedelta object ale do CombinedExpression
kombinowałem też z ExpressionWrapper ale bez efektu
delta = 60 * 1 * 5
sendafter = timezone.now() + datetime.timedelta(seconds=delta)
i wtedy robisz porównanie currentdate z sendafter, który jest oiektem datetime i nie musisz nic kombinować z sekundami
sendafter nic mi nie da jako obiekt datetime, ponieważ musze porownac createdat(DateTimeField w modelu z autoaddnow) do czasu now() i czy minęło od created at 5 minut
delta = 60 * 1 * 5
sendafter = timezone.now() - datetime.timedelta(seconds=delta)
Muszę znaleźć ile wynosi różnica pomiędzy
now() a wartością w polu createdat i jeżeli wynosi więcej niż delta to zwrócić ten obiekt w qs
coś pokroju:
self.annotate(foo=(Sum(F('createdat) - currentdate)) ale obv lokalnie mam tylko sqllite, na którym agregacja przez Sum nie działa, a właśnie wychodzę i nie
prze systemd śmiga mi proces co x minut, ktory wyciągać te obiekty z bazy i jeżeli mail jest już gotowy do wysłania do przekazuje buduje obiekt maila wraz z contextem i templatem, a następnie przekazuje go przez adapter to zewnętrznego dostawcy usługi wysyłania maili
Muszę tylko osiągnąć to, co przedstawia mój przykład ale ciągle nie wiem jak :/
dobra, udalo sie, nie jest eleganckie ale działa
qs = self.annotate(sendat=Sum(
currentdate - F('createdat'))).filter(sendat__gt=Sum(timezone.timedelta(seconds=delta)))
idea byla taka, zeby maile wysylaly sie po wypelnieniu formularza tak dlugo(okresy x, y,z) az klient nie wypelni okreslonego warunku, ktorego stan zmieni sie dopiero wtedy, gdy zewnetrzny dostawca uslugi da mi o tym