Views ===== Inheritance map for the ``richy.core.views`` module -- the bases and mixins that every per-app view file (``shares``, ``coins``, ``etfs``, ``indexes``, ``news``, ``staking``, ``transactions``) builds on. Each block lists one core class and every project-internal class that directly extends it. Django base classes (``View``, ``TemplateView``, ``DetailView``, ``ListView``, ``UpdateView``, ``CreateView``, ``RedirectView``, ``FormView``, ``LoginView``) and django-braces mixins (``LoginRequiredMixin``, ``FormMessagesMixin``, ``JSONResponseMixin``) are omitted to keep the picture readable. ``(+ ...)`` after a leaf names any *other* project-internal parents that view also mixes in. Mixins ------ Behaviour-only mixins. They render no template themselves; they get combined with view classes to add capabilities (submenu rendering, chart-data shaping, user-item manipulation, ...). .. code-block:: text TransactionChartDataMixin ├── core.DashboardTemplateView ├── transactions.BaseTransactionDetailView (+ SubmenuViewMixin) ├── transactions.OpenCreateView └── transactions.ClosedTemplateView SubmenuViewMixin ├── shares.SplitterSubmenuViewMixin ├── shares.ShareChildrenSubmenuViewMixin ├── coins.CoinChildrenSubmenuViewMixin ├── etfs.EtfSubmenuViewMixin ├── etfs.SplitterSubmenuViewMixin ├── indexes.IndexChildrenSubmenuViewMixin ├── staking.StakingSubmenuViewMixin ├── transactions.TransactionSubmenuViewMixin └── transactions.BaseTransactionDetailView (+ TransactionChartDataMixin) UserItemManipulationMixin ├── core.BaseUserItemCreateView ├── shares.ShareUpdateView (+ ShareChildrenSubmenuViewMixin, FetchDataMixin) ├── coins.CoinUpdateView (+ CoinChildrenSubmenuViewMixin, FetchDataMixin) ├── etfs.EtfUpdateView (+ EtfSubmenuViewMixin, FetchDataMixin) ├── indexes.IndexUpdateView (+ IndexChildrenSubmenuViewMixin, FetchDataMixin) └── staking.BaseStakingManipulationMixin (+ StakingSubmenuViewMixin) The paging mixins (``PaginatorMixin``, ``ModelPaginatorMixin``) are narrated separately on :doc:`/modules/core/paging`; their extenders for completeness: .. code-block:: text PaginatorMixin ├── core.BaseDrawdownPeriodsAndAthsDetailView └── news.NewsTemplateView ModelPaginatorMixin ├── core.BaseHistoricalData └── news.BaseNewsItemDetailView Ajax bases ---------- Base classes for JSON-only endpoints (chart-data feeds, current-price poll, etc.). .. code-block:: text AjaxView ├── core.BaseFetchItemAjaxView ├── core.ItemCurrentPriceAjaxView ├── core.FetchDrawdownAjaxView ├── core.TheEyeAjaxView └── transactions.BaseAssetAllocationChartDataAjaxView BaseFetchItemAjaxView ├── shares.FetchOverviewAjaxView ├── shares.FetchShareAjaxView ├── coins.FetchOverviewAjaxView ├── coins.FetchCoinAjaxView ├── etfs.FetchOverviewAjaxView ├── etfs.FetchEtfAjaxView ├── indexes.FetchOverviewAjaxView ├── indexes.FetchIndexAjaxView └── transactions.FetchItemPricesAjaxView Per-item-tab bases ------------------ Bases backing the per-asset detail-page tabs (Performance, Drawdowns & ATHs, The Eye, Historical data). Each per-app variant mixes in the relevant submenu mixin so the tab strip renders consistently. .. code-block:: text BaseItemDetailView ├── shares.ShareDetailView (+ ShareChildrenSubmenuViewMixin) ├── coins.CoinDetailView (+ CoinChildrenSubmenuViewMixin) ├── etfs.EtfDetailView (+ EtfSubmenuViewMixin) └── indexes.IndexDetailView (+ IndexChildrenSubmenuViewMixin) BasePerformanceDetailView ├── shares.PerformanceDetailView (+ ShareChildrenSubmenuViewMixin) ├── coins.PerformanceDetailView (+ CoinChildrenSubmenuViewMixin) ├── etfs.PerformanceDetailView (+ EtfSubmenuViewMixin) └── indexes.PerformanceDetailView (+ IndexChildrenSubmenuViewMixin) BaseTheEyeView ├── shares.ShareTheEyeView (+ ShareChildrenSubmenuViewMixin) ├── coins.CoinTheEyeView (+ CoinChildrenSubmenuViewMixin) ├── etfs.EtfTheEyeView (+ EtfSubmenuViewMixin) └── indexes.IndexTheEyeView (+ IndexChildrenSubmenuViewMixin) BaseHistoricalData ├── shares.HistoricalDataListView (+ ShareChildrenSubmenuViewMixin) ├── coins.HistoricalDataListView (+ CoinChildrenSubmenuViewMixin) ├── etfs.HistoricalDataListView (+ EtfSubmenuViewMixin) └── indexes.HistoricalDataListView (+ IndexChildrenSubmenuViewMixin) BaseDrawdownPeriodsAndAthsDetailView ├── shares.DrawdownPeriodsAndAthsTemplateView (+ ShareChildrenSubmenuViewMixin) ├── coins.DrawdownPeriodsAndAthsTemplateView (+ CoinChildrenSubmenuViewMixin) ├── etfs.DrawdownPeriodsAndAthsTemplateView (+ EtfSubmenuViewMixin) └── indexes.DrawdownPeriodsAndAthsTemplateView (+ IndexChildrenSubmenuViewMixin) Item CRUD bases --------------- .. code-block:: text BaseUserItemCreateView ├── shares.OverviewCreateView (+ FetchDataMixin) ├── coins.OverviewCreateView (+ FetchDataMixin) ├── etfs.OverviewCreateView (+ FetchDataMixin) └── indexes.OverviewCreateView (+ FetchDataMixin) BaseDeleteUserItemRedirectView ├── shares.DeleteShareRedirectView ├── coins.DeleteCoinRedirectView ├── etfs.DeleteEtfRedirectView └── indexes.DeleteIndexRedirectView Splitter bases -------------- Two-step form flow for applying a stock-split adjustment retroactively to historical prices. Implemented only by shares and ETFs. .. code-block:: text BaseSplitterFormView ├── shares.SplitterFormView (+ SplitterSubmenuViewMixin) └── etfs.SplitterFormView (+ SplitterSubmenuViewMixin) BaseSplitterPreviewFormView ├── shares.SplitterPreviewFormView (+ SplitterSubmenuViewMixin) └── etfs.SplitterPreviewFormView (+ SplitterSubmenuViewMixin) Standalone views ---------------- These ``richy.core.views`` classes don't have project-internal extenders -- they're concrete views used directly via URL routes: * ``HealthCheckView`` * ``DashboardTemplateView`` * ``SearchRedirectView`` * ``SignInFormView`` * ``SignOutRedirectView`` * ``ItemCurrentPriceAjaxView`` * ``FetchDrawdownAjaxView`` * ``TheEyeAjaxView``