Django implementation of Handsontable spreadsheets for CRUD actions.
Live Demo
Installation
Install django-funky-sheets:
$ pip install django-funky-sheets
Add funky_sheets to your INSTALLED_APPS:
# settings.py
INSTALLED_APPS = [
...
'funky_sheets',
...
]
Quick Start
URL
Define URLs for Create and Update views.
# urls.py
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')
]
View
Define Create and Update views which inherit from HotView and render the Handsontable spreadsheet based on selected model fields.
# views.py
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'
Template
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.
examples/create.html
...
{% include hot_template %}
...
examples/update.html
...
{% include hot_template %}
...
Contribute
This is an Open Source project and any contribution is appreciated.
License
This project is licensed under the MIT License.
Metadata
Release files for django-funky-sheets 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-funky-sheets-0.2.0.tar.gz | 348.4 kB | Details |
Release files / django-funky-sheets-0.2.0.tar.gz
| Download URL | django-funky-sheets-0.2.0.tar.gz |
|---|---|
| Size | 348.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
89f80160f9b6bcacbb5185375854d9d467d6475123c9bd001c8e440e371a97f6
|
|
BLAKE2b-256 checksum How to use checksums |
63b6d722e3f2109d2d3e7a9ad99cf82d3a92ee9aef8ae829af81e98db0ecd25a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4
|