1 from django.contrib import admin
2 from django.db.models import Count
3 from philo.admin import EntityAdmin
4 from philo.contrib.sobol.models import Search, ResultURL, SearchView
7 class ResultURLInline(admin.TabularInline):
9 template = 'search/admin/chosen_result_inline.html'
10 readonly_fields = ('url',)
16 class SearchAdmin(admin.ModelAdmin):
17 readonly_fields = ('string',)
18 inlines = [ResultURLInline]
19 list_display = ['string', 'unique_urls', 'total_clicks']
20 search_fields = ['string', 'result_urls__url']
22 def unique_urls(self, obj):
23 return obj.unique_urls
24 unique_urls.admin_order_field = 'unique_urls'
26 def total_clicks(self, obj):
27 return obj.total_clicks
28 total_clicks.admin_order_field = 'total_clicks'
30 def queryset(self, request):
31 qs = super(SearchAdmin, self).queryset(request)
32 return qs.annotate(total_clicks=Count('result_urls__clicks', distinct=True), unique_urls=Count('result_urls', distinct=True))
35 class SearchViewAdmin(EntityAdmin):
39 admin.site.register(Search, SearchAdmin)
40 admin.site.register(SearchView, SearchViewAdmin)