Be explicit about ratios
parent
c18da798f5
commit
ef0dabc25a
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue