menu

CRUD

material.frontend contains several class-based views, allows to build CRUD interfaces in a few lines of code.

You can start with a simple viewset - a class that collects CRUD view actions for a model in a myapp/views.py

from material.frontend.views import ModelViewSet
from . import models

class MyModelViewSet(ModelViewSet):
    model = models.MyModel

And add an entry to the myapp/urls.py

from django.urls import path, include
from django.views import generic
from . import views

urlpatterns = [
    path('', generic.RedirectView.as_view(url='./mymodel/', permanent=False), name="index"),
    path('mymodel/', include(views.MyModelViewSet().urls)),
    ...
]

ModelViewSet class is pretty similar to the django.contrib.admin.ModelAdmin except the all CRUD actions implemented in the separated class bases views.

API

class material.frontend.views.ModelViewSet

Model Create/Read/Update/Delete/List viewset.

Lightweight alternative for django admin. CRUD interface based in the django generic views. Viewset provides a simple place to configure the views and share the common configuration parameters.

Parameters
  • model – Model class views

  • queryset – Base views queryset

  • list_display – List of fields for ListView

  • list_display_links – List of fields form list_display linked to change view

  • ordering – Defaul ListView ordering

  • list_actions – Tuple of (‘Action Name’, ‘/action/url/’) that get called with a list of objects selected on the change list page. PRO Only

  • list_filterset_fields – List or dictinary of fields spec for django-filters in a ListView. PRO Only

  • list_filterset_class – Subclass of django_filters.FilterSet for ListView, if specified filterset_fields option ignored. PRO Only

  • create_view_class – CBV for create an object

  • list_view_class – CBV for create to list objects

  • detail_view_class – CBV to show an object detail

  • update_view_class – CBV to update an object

  • delete_view_class – CBV to delete an object

  • layout – Layout for django-material forms

  • form_class – Form Class for Create and Update views

  • form_widgets – Custom widgets for the model form in the Create and Update views, if no custom form_class provided.

There is no specifically requirements to CBV, by overriding corresponding get_<op>_view method you can even use function based views with this viewset.

Example:

class CityViewSet(ModelViewSet):
    model = models.Sea
    list_display = ('name', 'parent', 'ocean', 'sea_area', )
    layout = Layout(
        Row('name', 'parent'),
        'ocean',
        Row('area', 'avg_depth', 'max_depth'),
        'basin_countries'
    )

    def sea_area(self, sea):
        return None if sea.area == 0 else sea.area
get_queryset(self, request)

If defined, provides a default value for views queryset.

property create_view

Triple (regexp, view, name) for create view url config.

create_view_class

alias of material.frontend.views.create.CreateModelView

property delete_view

Triple (regexp, view, name) for delete view url config.

delete_view_class

alias of material.frontend.views.delete.DeleteModelView

property detail_view

Triple (regexp, view, name) for detail view url config.

detail_view_class

alias of material.frontend.views.detail.DetailModelView

filter_kwargs(view_class, **kwargs)

Add defaults and filter kwargs to only those that view can accept.

Viewset pass to the view only kwargs that have non DEFAULT values, and if the view have a corresponding attribute.

In addition, if view has viewset attribute, it will receive the self instance

get_action_view(action_view_class)

Construct a function action view form view class.

PRO Only

get_action_view_kwargs(action_view_class, **kwargs)

Configuration arguments for action view.

PRO Only

get_create_view()

Function view for create an object.

get_create_view_kwargs(**kwargs)

Configuration arguments for create view.

May not be called if get_create_view is overridden.

get_delete_view()

Function view for delete an object.

get_delete_view_kwargs(**kwargs)

Configuration arguments for delete view.

May not be called if get_delete_view is overridden.

get_detail_view()

Function view for object detail.

get_detail_view_kwargs(**kwargs)

Configuration arguments for detail view.

May not be called if get_detail_view is overridden.

get_list_view()

Function view for objects list.

get_list_view_kwargs(**kwargs)

Configuration arguments for list view.

May not be called if get_list_view is overridden.

get_update_view()

Function view for update an object.

get_update_view_kwargs(**kwargs)

Configuration arguments for update view.

May not be called if get_update_view is overridden.

has_add_permission(request)

Default add permission check for a detail and list views.

May not be called if views have own implementation.

has_change_permission(request, obj=None)

Default change permission check for a update view.

May not be called if update view have own implementation.

has_delete_permission(request, obj=None)

Default delete permission check for a delete view.

May not be called if delete view have own implementation.

has_view_permission(request, obj=None)

Default view permission check for a detail and list views.

May not be called if views have own implementation.

property list_view

Triple (regexp, view, name) for list view url config.

list_view_class

alias of material.frontend.views.list.ListModelView

property update_view

Triple (regexp, view, name) for update view url config.

update_view_class

alias of material.frontend.views.update.UpdateModelView

property urls

Collect url specs from the instance attributes.

Assumes that each attribute with name ending with _view contains tripple (regexp, view, url_name)

In addition registers action views on own urls.

class material.frontend.views.CreateModelView(*args, **kwargs)

Thin generic.CreateView wrapper plays nice with ModelViewSet.

get_success_url()

Redirect back to the detail view if no success_url is configured.

has_add_permission(request)

Object add permission check.

If view had a viewset, the viewset.has_add_permission used.

message_user()

Successful notification.

Subclasses can override it.

class material.frontend.views.UpdateModelView(*args, **kwargs)

Thin generic.UpdateView wrapper plays nice with ModelViewSet.

get_success_url()

Redirect back to the detail view if no success_url is configured.

has_object_permission(request, obj)

Object change permission check.

If view had a viewset, the viewset.has_change_permission used.

message_user()

Successful notification.

Subclasses can override it.

class material.frontend.views.DeleteModelView(**kwargs)

View for deleting an object and all linked by foreign key data.

delete(request, *args, **kwargs)

Call the delete() method on the fetched object and then redirect to the success URL.

get_context_data(**kwargs)

Extend view context data.

{{ deleted_objects }} - list of related objects to delete

get_object()

Retrieve the object for delete.

Check object delete permission at the same time.

get_queryset()

Return the list of items for this view.

If view have no explicit self.queryset, tries too lookup to viewflow.get_queryset

get_success_url()

Redirect back to the list view if no success_url is configured.

get_template_names()

List of templates for the view.

If no self.template_name defined, uses:

[<app_label>/<model_label>_delete.html,
 'material/frontend/views/confirm_delete.html']
has_object_permission(request, obj)

Object delete permission check.

If view had a viewset, the viewset.has_delete_permission used.

class material.frontend.views.DetailModelView(**kwargs)

Thin wrapper for generic.DetailView.

get_context_data(**kwargs)

Additional context data for detail view.

Parameters
  • object_data – List of fields and values of the object

  • change_url – Link to the change view

  • delete_url – Link to the delete view

get_object()

Retrieve the object.

Check object view permission at the same time.

get_object_data()

List of object fields to display.

Choice fields values are expanded to readable choice label.

get_queryset()

Return the list of items for this view.

If view have no explicit self.queryset, tries too lookup to viewflow.get_queryset

get_template_names()

List of templates for the view.

If no self.template_name defined, returns:

[<app_label>/<model_label>_detail.html
 'material/frontend/views/detail.html']
has_change_permission(request, obj)

Object chane permission check.

If view had a viewset, the viewset.has_change_permission used.

If true, view will show Change link to the Change view.

has_delete_permission(request, obj)

Object delete permission check.

If true, view will show Delete link to the Delete view.

has_view_permission(request, obj)

Object view permission check.

If view had a viewset, the viewset.has_view_permission used.

class material.frontend.views.list.DataTableMixin

Mixing for list views with DataTable.

dispatch(request, *args, **kwargs)

Handle for browser HTTP and AJAX requests from datatables.

get(request, *args, **kwargs)

Response with rendered html template.

get_columns_def()

Return columns definition for the datables js config.

get_context_data(**kwargs)

Update view context.

Include datatable_config, ‘headers’ and initial data to first page render.

get_data_attr(attr_name)

Data getter for an attribute.

Data could comes from the model field or external data_source method call.

get_datatable_config()

Prepare datatable config.

get_headers_data()

Readable column titles.

get_json_data(request, *args, **kwargs)

Return JSONResponse with data for datatable.

get_list_display()

Return list of columns to display.

get_object_list()

Create prepared queryset for datatables view.

get_ordering()

Return the field or fields to use for ordering the queryset.

PRO Only

get_table_data(start, length)

Get a page for datatable.

total()

Total dataset size.

total_filtered()

Dataset size with filter applied.

class material.frontend.views.list.FilterMixin
filterset_fields = None
get_filterset_class()

Return the filterset class to use in this view.

class material.frontend.views.ListModelView(**kwargs)

List view sutable to work with jQuery Datatables.

The view responsive for handling GET/POST requests from the browser and AJAX from the datatable.

Parameters
  • model – Model class views

  • queryset – Base views queryset

  • paginate_by – Page size

  • ordering – Default list order

  • datatable_config – Datatable default config overrides

  • list_display – List of fields to display

  • list_display_links – List of fields form list_display linked to change view

  • filterset_fields – List or dictinary of fields spec for django-filters. See details at https://github.com/carltongibson/django-filter#usage

  • filterset_class – Subclass of django_filters.FilterSet, if specified filterset_fields option ignored.

  • list_actions – Tuple of (‘Action Name’, ‘/action/url/’) that get called with a list of objects selected on the change list page. PRO Only

dispatch(request, *args, **kwargs)

Handle for browser HTTP and AJAX requests from datatables.

get_context_data(**kwargs)

Additional context data for list view.

Parameters

add_url – Link to the add view

get_item_url(item)

Link to object detail to list_display_links columns.

Return columns list that would be linked to the object details.

If self.list_display_links is not set, the first column would be used.

get_queryset()

Retrieve the view queryset.

get_template_names()

List of templates for the view.

If no self.template_name defined, uses:

[<app_label>/<model_label>_list.html,
 'material/frontend/views/list.html']
has_add_permission(request)

Object add permission check.

If view had a viewset, the viewset.has_add_permission used.

has_change_permission(request, obj=None)

Object change permission check.

If view had a viewset, the viewset.has_change_permission used.

has_view_permission(request, obj=None)

Object view permission check.

If view had a viewset, the viewset.has_view_permission used.

class material.frontend.views.actions.BaseActionView(**kwargs)
get(request, *args, **kwargs)

Handle GET requests: instantiate a blank version of the form.

get_form_class()

Return the form class to use.

get_success_url()

Redirect back to the list view if no success_url is configured.

post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class material.frontend.views.actions.DeleteActionView(**kwargs)
form_valid(form)

If the form is valid, redirect to the supplied URL.

get_context_data(**kwargs)

Extend view context data.

{{ deleted_objects }} - list of related objects to delete

get_template_names()

List of templates for the view.

If no self.template_name defined, returns:

[<app_label>/<model_label>_delete_action.html
 'material/frontend/views/delete_action.html']