Be explicit about ratios

break-out-core-urls-views
Eric Holscher 2016-04-01 16:28:49 -07:00
parent c18da798f5
commit ef0dabc25a
2 changed files with 28 additions and 13 deletions

View File

@ -11,25 +11,30 @@ class SupporterAdmin(admin.ModelAdmin):
class ImpressionInline(admin.TabularInline):
model = SupporterImpressions
readonly_fields = ('date', 'offers', 'views', 'clicks', 'shown')
readonly_fields = ('date', 'offers', 'views', 'clicks', 'view_ratio', 'click_ratio')
extra = 0
can_delete = False
max_num = 15
def shown(self, instance):
return instance.shown * 100
def view_ratio(self, instance):
return instance.view_ratio * 100
def click_ratio(self, instance):
return instance.click_ratio * 100
class SupporterPromoAdmin(admin.ModelAdmin):
model = SupporterPromo
list_display = ('name', 'display_type', 'text', 'live', 'shown')
readonly_fields = ('shown',)
list_display = ('name', 'display_type', 'text', 'live', 'view_ratio', 'click_ratio')
readonly_fields = ('view_ratio', 'click_ratio')
list_filter = ('live', 'display_type')
inlines = [ImpressionInline]
def shown(self, instance):
return instance.shown() * 100
def view_ratio(self, instance):
return instance.view_ratio() * 100
def click_ratio(self, instance):
return instance.click_ratio() * 100
admin.site.register(Supporter, SupporterAdmin)
admin.site.register(SupporterPromo, SupporterPromoAdmin)

View File

@ -104,12 +104,17 @@ class SupporterPromo(models.Model):
# TODO: Support redis, more info on this PR
# github.com/rtfd/readthedocs.org/pull/2105/files/1b5f8568ae0a7760f7247149bcff481efc000f32#r58253051
def shown(self, day=None):
"""Return the percentage of times this ad was shown when offered."""
def view_ratio(self, day=None):
if not day:
day = get_ad_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):
@ -126,8 +131,13 @@ class SupporterImpressions(models.Model):
unique_together = ('promo', 'date')
@property
def shown(self):
"""Return the percentage of times this ad was shown when offered."""
if self.views == 0:
def view_ratio(self):
if self.offers == 0:
return 0 # Don't divide by 0
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)