from django.contrib import admin from django.contrib.admin import register from django.urls import reverse_lazy from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ # Register your models here. from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter from core.admin import SafeModelAdmin from .models import Referral, ReferralStats from .forms import ReferralAdminForm, ReferralStatsAdminForm class ReferralAdminInline(admin.TabularInline): model = Referral verbose_name = 'Реферальная ссылка' verbose_name_plural = 'Реферальные ссылки' def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @register(Referral) class ReferralAdmin(SafeModelAdmin): def has_add_permission(self, request): return False def referral_stats(self, referral): try: link = reverse_lazy( 'admin:{}_{}_changelist'.format(referral.referralstats._meta.app_label, referral.referralstats._meta.object_name.lower()) ) link += '?q={}'.format(referral.code) except Exception as e: link = '#' name = _('Details') return format_html('{}', link, name) referral_stats.short_description = _('Stats') form = ReferralAdminForm list_display = ('code', 'create_at', 'updated_at', 'status', 'referral_stats') search_fields = ('code',) list_filter = ('status', ('create_at', DateRangeFilter), ('updated_at', DateTimeRangeFilter)) ordering = ('-create_at',) @register(ReferralStats) class ReferralStatsAdmin(SafeModelAdmin): def has_add_permission(self, request): return False def referral_code(self, stats): return stats.referral.code referral_code.short_description = _('Code') def converted_earnings(self, stats): return stats.earnings if stats.earnings > 0 else 0 converted_earnings.short_description = _('Earnings') form = ReferralStatsAdminForm list_display = ('referral_code', 'visits', 'registrations') list_select_related = ('referral',) search_fields = ('referral__name', 'referral__code',) ordering = ('-create_at',)