django-siteforms
================
https://github.com/idlesign/django-siteforms
|release| |lic| |coverage|
.. |release| image:: https://img.shields.io/pypi/v/django-siteforms.svg
:target: https://pypi.python.org/pypi/django-siteforms
.. |lic| image:: https://img.shields.io/pypi/l/django-siteforms.svg
:target: https://pypi.python.org/pypi/django-siteforms
.. |coverage| image:: https://img.shields.io/coveralls/idlesign/django-siteforms/master.svg
:target: https://coveralls.io/r/idlesign/django-siteforms
Description
-----------
*Django reusable app to simplify form construction*
For those who consider maintaining templates-based forms solutions for Django a burden.
Features:
* Full form rendering support, including prolog and submit button
* Subforms support (represent entire other form as a form field): JSON, Foreign Key, Many-to-Many
* Field groups
* Declarative attributes for elements
* Simplified declarative forms layout, allowing fields ordering
* Simple ways to make fields hidden, disabled, readonly
* Support for fields from model's properties
* Aria-friendly (Accessible Rich Internet Applications)
* Complex widgets (e.g. using values from multiple fields) support
* Filter-forms (use form for queryset filtering)
Supported styling:
* No CSS
* Bootstrap 4
* Bootstrap 5
Usage
-----
To render a form in templates just address a variable, e.g. ``<div>{{ form }}</div>``.
.. note:: By default there's no need to add a submit button and wrap it all into ``<form>``.
Basic
~~~~~
Let's show how to build a simple form.
.. code-block:: python
from django.shortcuts import render
from siteforms.composers.bootstrap5 import Bootstrap5
from siteforms.toolbox import ModelForm
class MyForm(ModelForm):
"""This form will show us how siteforms works."""
disabled_fields = {'somefield'} # Declarative way of disabling fields.
hidden_fields = {'otherfield'} # Declarative way of hiding fields.
readonly_fields = {'anotherfield'} # Declarative way of making fields readonly.
class Composer(Bootstrap5):
"""This will instruct siteforms to compose this
form using Bootstrap 5 styling.
"""
class Meta:
model = MyModel # Suppose you have a model class already.
fields = '__all__'
def my_view(request):
# Initialize form using data from POST.
my_form = MyForm(request=request, src='POST')
is_valid = form.is_valid()
return render(request, 'mytemplate.html', {'form': my_form})
Composer options
~~~~~~~~~~~~~~~~
Now let's see how to tune our form.
.. code-block:: python
from siteforms.composers.bootstrap5 import Bootstrap5, FORM, ALL_FIELDS
class Composer(Bootstrap5):
opt_size='sm' # Bootstrap 5 has sizes, so let's make our form small.
# Element (fields, groups, form, etc.) attributes are ruled by `attrs`.
# Let's add rows=2 to our `contents` model field.
attrs={'contents': {'rows': 2}}
# To group fields into named groups describe them in `groups`.
groups={
'basic': 'Basic attributes',
'other': 'Other fields',
}
# We apply custom layout to our form.
layout = {
FORM: {
'basic': [ # First we place `basic` group.
# The following three fields are in the same row -
# two fields in the right column are stacked.
['title', ['date_created',
'date_updated']],
'contents', # This one field goes into a separate row.
],
# We place all the rest fields into `other` group.
'other': ALL_FIELDS,
}
}
Documentation
-------------
https://django-siteforms.readthedocs.org/
Raw data
{
"_id": null,
"home_page": "https://github.com/idlesign/django-siteforms",
"name": "django-siteforms",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Igor `idle sign` Starikov",
"author_email": "idlesign@yandex.ru",
"download_url": "https://files.pythonhosted.org/packages/07/04/682ff2849480f73af511a10733cde21be3112f2ab06c48330baf67ca5f9a/django-siteforms-1.2.0.tar.gz",
"platform": null,
"description": "django-siteforms\n================\nhttps://github.com/idlesign/django-siteforms\n\n|release| |lic| |coverage|\n\n.. |release| image:: https://img.shields.io/pypi/v/django-siteforms.svg\n :target: https://pypi.python.org/pypi/django-siteforms\n\n.. |lic| image:: https://img.shields.io/pypi/l/django-siteforms.svg\n :target: https://pypi.python.org/pypi/django-siteforms\n\n.. |coverage| image:: https://img.shields.io/coveralls/idlesign/django-siteforms/master.svg\n :target: https://coveralls.io/r/idlesign/django-siteforms\n\n\nDescription\n-----------\n\n*Django reusable app to simplify form construction*\n\nFor those who consider maintaining templates-based forms solutions for Django a burden.\n\nFeatures:\n\n* Full form rendering support, including prolog and submit button\n* Subforms support (represent entire other form as a form field): JSON, Foreign Key, Many-to-Many\n* Field groups\n* Declarative attributes for elements\n* Simplified declarative forms layout, allowing fields ordering\n* Simple ways to make fields hidden, disabled, readonly\n* Support for fields from model's properties\n* Aria-friendly (Accessible Rich Internet Applications)\n* Complex widgets (e.g. using values from multiple fields) support\n* Filter-forms (use form for queryset filtering)\n\nSupported styling:\n\n* No CSS\n* Bootstrap 4\n* Bootstrap 5\n\n\nUsage\n-----\n\nTo render a form in templates just address a variable, e.g. ``<div>{{ form }}</div>``.\n\n.. note:: By default there's no need to add a submit button and wrap it all into ``<form>``.\n\nBasic\n~~~~~\n\nLet's show how to build a simple form.\n\n.. code-block:: python\n\n from django.shortcuts import render\n from siteforms.composers.bootstrap5 import Bootstrap5\n from siteforms.toolbox import ModelForm\n\n\n class MyForm(ModelForm):\n \"\"\"This form will show us how siteforms works.\"\"\"\n \n disabled_fields = {'somefield'} # Declarative way of disabling fields.\n hidden_fields = {'otherfield'} # Declarative way of hiding fields.\n readonly_fields = {'anotherfield'} # Declarative way of making fields readonly.\n\n class Composer(Bootstrap5):\n \"\"\"This will instruct siteforms to compose this\n form using Bootstrap 5 styling.\n\n \"\"\"\n class Meta:\n model = MyModel # Suppose you have a model class already.\n fields = '__all__'\n\n def my_view(request):\n # Initialize form using data from POST.\n my_form = MyForm(request=request, src='POST')\n is_valid = form.is_valid()\n return render(request, 'mytemplate.html', {'form': my_form})\n\n\nComposer options\n~~~~~~~~~~~~~~~~\n\nNow let's see how to tune our form.\n\n.. code-block:: python\n\n from siteforms.composers.bootstrap5 import Bootstrap5, FORM, ALL_FIELDS\n\n class Composer(Bootstrap5):\n\n opt_size='sm' # Bootstrap 5 has sizes, so let's make our form small.\n\n # Element (fields, groups, form, etc.) attributes are ruled by `attrs`.\n # Let's add rows=2 to our `contents` model field.\n attrs={'contents': {'rows': 2}}\n\n # To group fields into named groups describe them in `groups`.\n groups={\n 'basic': 'Basic attributes',\n 'other': 'Other fields',\n }\n\n # We apply custom layout to our form.\n layout = {\n FORM: {\n 'basic': [ # First we place `basic` group.\n # The following three fields are in the same row -\n # two fields in the right column are stacked.\n ['title', ['date_created',\n 'date_updated']],\n 'contents', # This one field goes into a separate row.\n ],\n # We place all the rest fields into `other` group.\n 'other': ALL_FIELDS,\n }\n }\n\n\nDocumentation\n-------------\n\nhttps://django-siteforms.readthedocs.org/\n\n\n",
"bugtrack_url": null,
"license": "BSD 3-Clause License",
"summary": "Django reusable app to simplify form construction",
"version": "1.2.0",
"project_urls": {
"Homepage": "https://github.com/idlesign/django-siteforms"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "638a3341bfa144b63e01da904fd0b42b01eeecf1051894be1fc227f2031ac808",
"md5": "06f93b77b521128448a70847a5cf43cf",
"sha256": "ea228b10d33573c42ae374f0632a5838bd8b84d66e2b643fd5f77c2f326eaa76"
},
"downloads": -1,
"filename": "django_siteforms-1.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "06f93b77b521128448a70847a5cf43cf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42275,
"upload_time": "2023-09-08T14:52:10",
"upload_time_iso_8601": "2023-09-08T14:52:10.195250Z",
"url": "https://files.pythonhosted.org/packages/63/8a/3341bfa144b63e01da904fd0b42b01eeecf1051894be1fc227f2031ac808/django_siteforms-1.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0704682ff2849480f73af511a10733cde21be3112f2ab06c48330baf67ca5f9a",
"md5": "c0159f14d98f278deb6319838d70bba7",
"sha256": "763e7e3f21bd5ebb5430e4d08c4024ad5928f8cf81605c7138aaf17508b40936"
},
"downloads": -1,
"filename": "django-siteforms-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "c0159f14d98f278deb6319838d70bba7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 40092,
"upload_time": "2023-09-08T14:52:11",
"upload_time_iso_8601": "2023-09-08T14:52:11.945446Z",
"url": "https://files.pythonhosted.org/packages/07/04/682ff2849480f73af511a10733cde21be3112f2ab06c48330baf67ca5f9a/django-siteforms-1.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-08 14:52:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "idlesign",
"github_project": "django-siteforms",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "django-siteforms"
}