{ "info": { "author": "Uros Trstenjak", "author_email": "uros.trstenjak@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "===================\nDjango Funky Sheets\n===================\n\nDjango implementation of Handsontable spreadsheets for CRUD actions.\n\nLive Demo\n=========\n\nDemo_\n\n.. _Demo: https://trco.si/dfs/create/\n\nInstallation\n============\n\nInstall ``django-funky-sheets``::\n\n $ pip install django-funky-sheets\n\nAdd ``funky_sheets`` to your INSTALLED_APPS::\n\n # settings.py\n\n INSTALLED_APPS = [\n ...\n 'funky_sheets',\n ...\n ]\n\nQuick Start\n===========\n\nURL\n---\n\nDefine URLs for Create and Update views.\n\n.. code-block:: python\n\n # urls.py\n\n from django.urls import path\n from . import views\n\n urlpatterns = [\n path('', views.index, name='index'),\n path('create/', views.CreateMovieView.as_view(), name='create'),\n path('update/', views.UpdateMovieView.as_view(), name='update')\n ]\n\nView\n----\n\nDefine Create and Update views which inherit from ``HotView`` and render the Handsontable spreadsheet based on selected model fields.\n\n.. code-block:: python\n\n # views.py\n\n from django.forms import CheckboxSelectMultiple, CheckboxInput, DateInput\n from django.urls import reverse_lazy\n\n from funky_sheets.formsets import HotView\n\n from .models import Movie\n\n class CreateMovieView(HotView):\n # Define model to be used by the view\n model = Movie\n # Define template\n template_name = 'examples/create.html'\n # Define custom characters/strings for checked/unchecked checkboxes\n checkbox_checked = 'yes' # default: true\n checkbox_unchecked = 'no' # default: false\n # Define prefix for the formset which is constructed from Handsontable spreadsheet on submission\n prefix = 'table'\n # Define success URL\n success_url = reverse_lazy('update')\n # Define fields to be included as columns into the Handsontable spreadsheet\n fields = (\n 'id',\n 'title',\n 'director',\n 'release_date',\n 'parents_guide',\n 'imdb_rating',\n 'genre',\n 'imdb_link',\n )\n # Define extra formset factory kwargs\n factory_kwargs = {\n 'widgets': {\n 'release_date': DateInput(attrs={'type': 'date'}),\n 'genre': CheckboxSelectMultiple(),\n 'parents_guide': CheckboxInput(),\n }\n }\n # Define Handsontable settings as defined in Handsontable docs\n hot_settings = {\n 'contextMenu': 'true',\n 'autoWrapRow': 'true',\n 'rowHeaders': 'true',\n 'contextMenu': 'true',\n 'search': 'true',\n # When value is dictionary don't wrap it in quotes\n 'headerTooltips': {\n 'rows': 'false',\n 'columns': 'true'\n },\n # When value is list don't wrap it in quotes\n 'dropdownMenu': [\n 'remove_col',\n '---------',\n 'make_read_only',\n '---------',\n 'alignment'\n ]\n }\n\n class UpdateMovieView(CreateMovieView):\n template_name = 'examples/update.html'\n # Define 'update' action\n action = 'update'\n # Define 'update' button\n button_text = 'Update'\n\nTemplate\n--------\n\n``hot_template`` uses ``jQuery 3.3.1`` and ``Handsontable 7.0.0.``\n\nIf 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.\n\nDefine templates which include ``hot_template`` in place where you want to render Handsontable spreadsheet.\n\n.. code-block:: html+django\n\n examples/create.html\n\n ...\n {% include hot_template %}\n ...\n\n examples/update.html\n\n ...\n {% include hot_template %}\n ...\n\nContribute\n==========\n\nThis is an Open Source project and any contribution is appreciated.\n\nLicense\n=======\n\nThis project is licensed under the MIT License.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/trco/django-funky-sheets", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "django-funky-sheets", "package_url": "https://pypi.org/project/django-funky-sheets/", "platform": "", "project_url": "https://pypi.org/project/django-funky-sheets/", "project_urls": { "Homepage": "https://github.com/trco/django-funky-sheets" }, "release_url": "https://pypi.org/project/django-funky-sheets/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Django implementation of Handsontable spreadsheets for CRUD actions.", "version": "0.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 6009283, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "da1f28d95c7ab30f423aa03b6ad3c083", "sha256": "48e92cc98833d5d1acdfe4950ef25c708795be7367fbb939db407f8d90b62271" }, "downloads": -1, "filename": "django-funky-sheets-0.1.0.tar.gz", "has_sig": false, "md5_digest": "da1f28d95c7ab30f423aa03b6ad3c083", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11230, "upload_time": "2019-02-26T21:40:26", "upload_time_iso_8601": "2019-02-26T21:40:26.841613Z", "url": "https://files.pythonhosted.org/packages/ed/d6/d13d3691852d9588ee73786c24d0cd8a3f5044ed4b755f909589527597fc/django-funky-sheets-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1de6896a4a601448be10f5c6206b84b3", "sha256": "a2ae8a36f77a51efb08150bf78b75e0c4e6414f4d163b040c95d3901a6ce7558" }, "downloads": -1, "filename": "django-funky-sheets-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1de6896a4a601448be10f5c6206b84b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11222, "upload_time": "2019-02-26T21:55:55", "upload_time_iso_8601": "2019-02-26T21:55:55.699371Z", "url": "https://files.pythonhosted.org/packages/b6/ad/2c04fc9f4ba00e1b3b7a2bfa3e9df5e8cb8bfbfd15691a0b8d7afbcb9f64/django-funky-sheets-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e6e0f990d7b8e95bb5aedab9ff6229be", "sha256": "9649626458c82a628b09bfe265dbe177da4de59400c2469396216a73be7653be" }, "downloads": -1, "filename": "django-funky-sheets-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e6e0f990d7b8e95bb5aedab9ff6229be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11637, "upload_time": "2019-03-07T19:16:17", "upload_time_iso_8601": "2019-03-07T19:16:17.302568Z", "url": "https://files.pythonhosted.org/packages/42/f3/8dc781bb6df8f66fbeee7b9364d6e57ac064ddd97f2db4a2b19e12b23126/django-funky-sheets-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5b5f4415d2615a6afc89afde0d412f87", "sha256": "4718f6541ae0abdcd2a371cedd2b363eb6647e3e9249144ff3dfce3a7add4fa1" }, "downloads": -1, "filename": "django-funky-sheets-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5b5f4415d2615a6afc89afde0d412f87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11757, "upload_time": "2019-05-28T17:56:36", "upload_time_iso_8601": "2019-05-28T17:56:36.565052Z", "url": "https://files.pythonhosted.org/packages/ad/c4/42ed642328afd914ea74faafe1189b01c9ba36df0725e560f7ef3c84ac29/django-funky-sheets-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "a6696ff385f69e3261c0ddf012a6c999", "sha256": "89f80160f9b6bcacbb5185375854d9d467d6475123c9bd001c8e440e371a97f6" }, "downloads": -1, "filename": "django-funky-sheets-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a6696ff385f69e3261c0ddf012a6c999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 348356, "upload_time": "2019-10-21T20:47:31", "upload_time_iso_8601": "2019-10-21T20:47:31.132452Z", "url": "https://files.pythonhosted.org/packages/63/b6/d722e3f2109d2d3e7a9ad99cf82d3a92ee9aef8ae829af81e98db0ecd25a/django-funky-sheets-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a6696ff385f69e3261c0ddf012a6c999", "sha256": "89f80160f9b6bcacbb5185375854d9d467d6475123c9bd001c8e440e371a97f6" }, "downloads": -1, "filename": "django-funky-sheets-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a6696ff385f69e3261c0ddf012a6c999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 348356, "upload_time": "2019-10-21T20:47:31", "upload_time_iso_8601": "2019-10-21T20:47:31.132452Z", "url": "https://files.pythonhosted.org/packages/63/b6/d722e3f2109d2d3e7a9ad99cf82d3a92ee9aef8ae829af81e98db0ecd25a/django-funky-sheets-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }