Plain is headed towards 1.0! Subscribe for development updates →

 1from plain.admin.cards import Card, TrendCard
 2from plain.admin.views import (
 3    AdminModelDetailView,
 4    AdminModelListView,
 5    AdminViewset,
 6    register_viewset,
 7)
 8
 9from .models import Pageview
10
11
12class PageviewsTrendCard(TrendCard):
13    title = "Pageviews trend"
14    model = Pageview
15    datetime_field = "timestamp"
16    size = TrendCard.Sizes.FULL
17
18
19@register_viewset
20class PageviewAdmin(AdminViewset):
21    class ListView(AdminModelListView):
22        model = Pageview
23        nav_section = "Pageviews"
24        nav_icon = "eye"
25        title = "Pageviews"
26        fields = ["user_id", "url", "timestamp", "session_id"]
27        search_fields = ["id", "user_id", "url", "session_id"]
28        cards = [PageviewsTrendCard]
29
30    class DetailView(AdminModelDetailView):
31        model = Pageview
32
33
34class UserPageviewsCard(Card):
35    title = "Recent pageviews"
36    template_name = "pageviews/card.html"
37
38    def get_template_context(self):
39        context = super().get_template_context()
40
41        context["pageviews"] = Pageview.query.filter(
42            user_id=self.view.object.id
43        ).order_by("-timestamp")[:50]
44
45        return context