from abc import ABC from datetime import datetime from django.contrib.admin import SimpleListFilter from django.http import HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ from django.contrib import admin from rangefilter.filters import DateRangeFilter, DateTimeRangeFilter from django.urls import path from ..models.customer import Customer from ..models.customer import Sport from ..mautic import MauticHelper from ..cron import cron class SportFilter(SimpleListFilter, ABC): title = "Sport" parameter_name = 'sport_id' def lookups(self, request, model_admin): data = [] for s in Sport.objects.filter(): data.append([s.sport_id, s.sport_name]) return data def queryset(self, request, queryset): if self.value(): return Customer.objects.filter(sport__sport_id=self.value()) else: return queryset class CustomerAdmin(admin.ModelAdmin): change_list_template = "controlling/mautic.html" list_display = ('customer_id', 'name','firstname', 'email', 'date_add', 'get_sport') list_filter = ( ('date_add', DateRangeFilter), SportFilter ) def get_sport(self, obj): return obj.sport.sport_name get_sport.short_description = 'Sport' get_sport.admin_order_field = 'sport__sport_name' # If you would like to add a default range filter # method pattern "get_rangefilter_{field_name}_default" def get_rangefilter_date_add_default(self, request): return (datetime.today(), datetime.today()) # If you would like to change a title range filter # method pattern "get_rangefilter_{field_name}_title" def get_rangefilter_date_add_title(self, request, field_path): return _('Registered') def changelist_view(self, request, extra_context=None): if not request.GET.__contains__('date_add__range__gte'): q = request.GET.copy() q['date_add__range__gte'] = datetime.today() q['date_add__range__lte'] = datetime.today() request.GET = q request.META['QUERY_STRING'] = request.GET.urlencode() return super(CustomerAdmin, self).changelist_view( request, extra_context=extra_context) def get_urls(self): urls = super().get_urls() my_urls = [ path('mautic/', self.set_mautic), ] return my_urls + urls def set_mautic(self, request): cron.sync_customers() self.message_user(request, "All heroes are now synced") return HttpResponseRedirect("../") admin.site.register(Customer, CustomerAdmin) admin.autodiscover()