Be explicit about ratios
parent
c18da798f5
commit
ef0dabc25a
|
@ -11,25 +11,30 @@ class SupporterAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
class ImpressionInline(admin.TabularInline):
|
class ImpressionInline(admin.TabularInline):
|
||||||
model = SupporterImpressions
|
model = SupporterImpressions
|
||||||
readonly_fields = ('date', 'offers', 'views', 'clicks', 'shown')
|
readonly_fields = ('date', 'offers', 'views', 'clicks', 'view_ratio', 'click_ratio')
|
||||||
extra = 0
|
extra = 0
|
||||||
can_delete = False
|
can_delete = False
|
||||||
max_num = 15
|
max_num = 15
|
||||||
|
|
||||||
def shown(self, instance):
|
def view_ratio(self, instance):
|
||||||
return instance.shown * 100
|
return instance.view_ratio * 100
|
||||||
|
|
||||||
|
def click_ratio(self, instance):
|
||||||
|
return instance.click_ratio * 100
|
||||||
|
|
||||||
|
|
||||||
class SupporterPromoAdmin(admin.ModelAdmin):
|
class SupporterPromoAdmin(admin.ModelAdmin):
|
||||||
model = SupporterPromo
|
model = SupporterPromo
|
||||||
list_display = ('name', 'display_type', 'text', 'live', 'shown')
|
list_display = ('name', 'display_type', 'text', 'live', 'view_ratio', 'click_ratio')
|
||||||
readonly_fields = ('shown',)
|
readonly_fields = ('view_ratio', 'click_ratio')
|
||||||
list_filter = ('live', 'display_type')
|
list_filter = ('live', 'display_type')
|
||||||
inlines = [ImpressionInline]
|
inlines = [ImpressionInline]
|
||||||
|
|
||||||
def shown(self, instance):
|
def view_ratio(self, instance):
|
||||||
return instance.shown() * 100
|
return instance.view_ratio() * 100
|
||||||
|
|
||||||
|
def click_ratio(self, instance):
|
||||||
|
return instance.click_ratio() * 100
|
||||||
|
|
||||||
admin.site.register(Supporter, SupporterAdmin)
|
admin.site.register(Supporter, SupporterAdmin)
|
||||||
admin.site.register(SupporterPromo, SupporterPromoAdmin)
|
admin.site.register(SupporterPromo, SupporterPromoAdmin)
|
||||||
|
|
|
@ -104,12 +104,17 @@ class SupporterPromo(models.Model):
|
||||||
# TODO: Support redis, more info on this PR
|
# TODO: Support redis, more info on this PR
|
||||||
# github.com/rtfd/readthedocs.org/pull/2105/files/1b5f8568ae0a7760f7247149bcff481efc000f32#r58253051
|
# github.com/rtfd/readthedocs.org/pull/2105/files/1b5f8568ae0a7760f7247149bcff481efc000f32#r58253051
|
||||||
|
|
||||||
def shown(self, day=None):
|
def view_ratio(self, day=None):
|
||||||
"""Return the percentage of times this ad was shown when offered."""
|
|
||||||
if not day:
|
if not day:
|
||||||
day = get_ad_day()
|
day = get_ad_day()
|
||||||
impression = self.impressions.get(date=day)
|
impression = self.impressions.get(date=day)
|
||||||
return impression.shown
|
return impression.view_ratio
|
||||||
|
|
||||||
|
def click_ratio(self, day=None):
|
||||||
|
if not day:
|
||||||
|
day = get_ad_day()
|
||||||
|
impression = self.impressions.get(date=day)
|
||||||
|
return impression.click_ratio
|
||||||
|
|
||||||
|
|
||||||
class SupporterImpressions(models.Model):
|
class SupporterImpressions(models.Model):
|
||||||
|
@ -126,8 +131,13 @@ class SupporterImpressions(models.Model):
|
||||||
unique_together = ('promo', 'date')
|
unique_together = ('promo', 'date')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def shown(self):
|
def view_ratio(self):
|
||||||
"""Return the percentage of times this ad was shown when offered."""
|
if self.offers == 0:
|
||||||
if self.views == 0:
|
|
||||||
return 0 # Don't divide by 0
|
return 0 # Don't divide by 0
|
||||||
return float(self.views) / float(self.offers)
|
return float(self.views) / float(self.offers)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def click_ratio(self):
|
||||||
|
if self.views == 0:
|
||||||
|
return 0 # Don't divide by 0
|
||||||
|
return float(self.clicks) / float(self.views)
|
||||||
|
|
Loading…
Reference in New Issue