Django implementation of Handsontable spreadsheets for CRUD actions.
Django implementation of Handsontable spreadsheets for CRUD actions.
.. contents:: Table of Contents :depth: 2 :local: :backlinks: none
Dockerfile
and docker-compose.yml
files for easy setup and testing on your machine are coming soon.
Install django-funky-sheets
::
$ pip install django-funky-sheets
Add funky_sheets
to your INSTALLED_APPS::
INSTALLED_APPS = [ ... 'funky_sheets', ... ]
Define URLs for Create and Update views.
.. code-block:: python
from django.urls import path from . import views
urlpatterns = [ path('', views.index, name='index'), path('create/', views.CreateMovieView.as_view(), name='create'), path('update/', views.UpdateMovieView.as_view(), name='update') ]
Define Create and Update views which inherit from HotView
and render the Handsontable spreadsheet based on selected model fields.
.. code-block:: python
from django.forms import CheckboxSelectMultiple, CheckboxInput, DateInput from django.urls import reverse_lazy
from funky_sheets.formsets import HotView
from .models import Movie
class CreateMovieView(HotView): # Define model to be used by the view model = Movie # Define template template_name = 'examples/create.html' # Define custom characters/strings for checked/unchecked checkboxes checkbox_checked = 'yes' # default: true checkbox_unchecked = 'no' # default: false # Define prefix for the formset which is constructed from Handsontable spreadsheet on submission prefix = 'table' # Define success URL success_url = reverse_lazy('update') # Define fields to be included as columns into the Handsontable spreadsheet fields = ( 'id', 'title', 'director', 'release_date', 'parents_guide', 'imdb_rating', 'genre', 'imdb_link', ) # Define extra formset factory kwargs factory_kwargs = { 'widgets': { 'release_date': DateInput(attrs={'type': 'date'}), 'genre': CheckboxSelectMultiple(), 'parents_guide': CheckboxInput(), } } # Define Handsontable settings as defined in Handsontable docs hot_settings = { 'contextMenu': 'true', 'autoWrapRow': 'true', 'rowHeaders': 'true', 'contextMenu': 'true', 'search': 'true', # When value is dictionary don't wrap it in quotes 'headerTooltips': { 'rows': 'false', 'columns': 'true' }, # When value is list don't wrap it in quotes 'dropdownMenu': [ 'remove_col', '---------', 'make_read_only', '---------', 'alignment' ] }
class UpdateMovieView(CreateMovieView): template_name = 'examples/update.html' # Define 'update' action action = 'update' # Define 'update' button button_text = 'Update'
hot_template
uses jQuery 3.3.1
and Handsontable 7.0.0.
If you would like to use different versions of jQuery
and Handsontable
you should create your own hot_template
by copying default hot_template
in funky_sheets/templates/hot/hot.html and loading selected versions of jQuery
, Handsontable JavaScript and CSS
. Note that the compatibility with different versions is not guaranteed. You should than include your custom hot_template
when creating templates like create.html
and update.html
in the examples.
Define templates which include hot_template
in place where you want to render Handsontable spreadsheet.
.. code-block:: html+django
examples/create.html
... {% include hot_template %} ...
examples/update.html
... {% include hot_template %} ...
When reporting an issue for django-funky-sheets
package, please prepare a publicly available repository having the issue you are reporting. The clear reproduce is the optimal way towards resolution.
This is an Open Source project and any contribution is highly appreciated.
This project is licensed under the MIT License.