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¶
- property delete_view¶
Triple (regexp, view, name) for delete view url config.
- delete_view_class¶
- property detail_view¶
Triple (regexp, view, name) for detail view url config.
- detail_view_class¶
- 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¶
- property update_view¶
Triple (regexp, view, name) for update view url config.
- update_view_class¶
- 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.
- get_list_display_links(list_display)¶
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']