solve bug related to gunicorns random module loading behaviour

v1-0-stable
Christian Merten 5 years ago
parent 4c59eacf34
commit 7e8fbf241e

@ -85,26 +85,69 @@ class MemberAdmin(admin.ModelAdmin):
queryset = super().get_queryset(request) queryset = super().get_queryset(request)
one_year_ago = datetime.now() - timedelta(days=365) one_year_ago = datetime.now() - timedelta(days=365)
queryset = queryset.annotate( queryset = queryset.annotate(
_jugendleiter_klettertreff_score=Sum(Case( _jugendleiter_freizeit_score_calc=Subquery(
When( Freizeit.objects.filter(jugendleiter=OuterRef('pk'),
klettertreff__date__gte=one_year_ago, date__gte=one_year_ago)
then=1), .values('jugendleiter')
default=0, .annotate(cnt=Count('pk', distinct=True))
.values('cnt'),
output_field=IntegerField() output_field=IntegerField()
)), ),
_jugendleiter_freizeit_score=Sum(Case( # better solution but does not work in production apparently
When( #_jugendleiter_freizeit_score=Sum(Case(
freizeit__date__gte=one_year_ago, # When(
then=1), # freizeit__date__gte=one_year_ago,
default=0, # then=1),
# default=0,
# output_field=IntegerField()
# ),
# distinct=True),
_jugendleiter_klettertreff_score_calc=Subquery(
Klettertreff.objects.filter(jugendleiter=OuterRef('pk'),
date__gte=one_year_ago)
.values('jugendleiter')
.annotate(cnt=Count('pk', distinct=True))
.values('cnt'),
output_field=IntegerField()
),
# better solution but does not work in production apparently
#_jugendleiter_klettertreff_score=Sum(Case(
# When(
# klettertreff__date__gte=one_year_ago,
# then=1),
# default=0,
# output_field=IntegerField()
# ),
# distinct=True),
_freizeit_score_calc=Subquery(
Freizeit.objects.filter(membersonlist__member=OuterRef('pk'),
date__gte=one_year_ago)
.values('membersonlist__member')
.annotate(cnt=Count('pk', distinct=True))
.values('cnt'),
output_field=IntegerField() output_field=IntegerField()
)), ),
_klettertreff_score_calc=Subquery( _klettertreff_score_calc=Subquery(
KlettertreffAttendee.objects.filter(member=OuterRef('pk'), KlettertreffAttendee.objects.filter(member=OuterRef('pk'),
klettertreff__date__gte=one_year_ago) klettertreff__date__gte=one_year_ago)
.values('member') .values('member')
.annotate(cnt=Count('pk', distinct=True)) .annotate(cnt=Count('pk', distinct=True))
.values('cnt'), .values('cnt'),
output_field=IntegerField()))
queryset = queryset.annotate(
_jugendleiter_freizeit_score=Case(
When(
_jugendleiter_freizeit_score_calc=None,
then=0
),
default=F('_jugendleiter_freizeit_score_calc'),
output_field=IntegerField()),
_jugendleiter_klettertreff_score=Case(
When(
_jugendleiter_klettertreff_score_calc=None,
then=0
),
default=F('_jugendleiter_klettertreff_score_calc'),
output_field=IntegerField()), output_field=IntegerField()),
_klettertreff_score=Case( _klettertreff_score=Case(
When( When(
@ -113,23 +156,17 @@ class MemberAdmin(admin.ModelAdmin):
), ),
default=F('_klettertreff_score_calc'), default=F('_klettertreff_score_calc'),
output_field=IntegerField()), output_field=IntegerField()),
_freizeit_score_calc=Subquery(
Freizeit.objects.filter(membersonlist__member=OuterRef('pk'),
date__gte=one_year_ago)
.values('membersonlist__member')
.annotate(cnt=Count('pk', distinct=True))
.values('cnt'),
output_field=IntegerField()
),
_freizeit_score=Case( _freizeit_score=Case(
When( When(
_freizeit_score_calc=None, _freizeit_score_calc=None,
then=0 then=0
), ),
default=F('_freizeit_score_calc'), default=F('_freizeit_score_calc'),
output_field=IntegerField()), output_field=IntegerField()))
queryset = queryset.annotate(
#_activity_score=F('_jugendleiter_freizeit_score')
_activity_score=(F('_klettertreff_score') + 3 * F('_freizeit_score') _activity_score=(F('_klettertreff_score') + 3 * F('_freizeit_score')
+ 2 * F('_jugendleiter_klettertreff_score') + 6 * F('_jugendleiter_freizeit_score')) + F('_jugendleiter_klettertreff_score') + 3 * F('_jugendleiter_freizeit_score'))
) )
return queryset return queryset

Loading…
Cancel
Save