{ "info": { "author": "kenny1992", "author_email": "apolevki09@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Capybara forms\nDynamic Django forms and filters using JSON schema.\n\nIf you have 2 models: Category and Entry.\nAnd some entry features depends on it's category.\nUsing this library, you will obtain easy-to-configure\nschema with form, filter and entry fields generators.\nAlso, it can work with model fields.\n\n# Quick start\n1. Define your models\n```python\nfrom django.db import models\nfrom capybara_forms.models import CapybaraFormsCategory, CapybaraFormsModel\n\n\nclass Category(CapybaraFormsCategory):\n title = models.CharField(max_length=100)\n\nclass Advert(CapybaraFormsModel(Category)):\n # Global model fields\n title = models.CharField(max_length=100)\n price = models.PositiveSmallIntegerField()\n # Rest fields will be stored in JSON 'data' field\n```\n\n2. Write schema for category 'Cats'\n```json\n[\n {\n \"name\": \"breed\",\n \"type\": \"string\",\n \"required\": true,\n \"display_name\": \"Breed\",\n \"placeholder\": \"Enter breed of your cat\"\n },\n {\n \"name\": \"year\",\n \"type\": \"number\",\n \"required\": true,\n \"max_value\": 2020,\n \"min_value\": 1980,\n \"placeholder\": \"Enter birth year of your cat\",\n \"display_name\": \"Birth year\"\n },\n {\n \"name\": \"weight\",\n \"type\": \"number\",\n \"placeholder\": \"Enter the weight of your cat\",\n \"display_name\": \"Weight\"\n },\n {\n \"name\": \"height\",\n \"type\": \"number\",\n \"placeholder\": \"Height (only placeholder, without display name)\"\n },\n {\n \"type\": \"color\",\n \"display_name\": \"Cat's color\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"placeholder\": \"Enter cat nickname\",\n \"display_name\": \"Name\"\n },\n {\n \"name\": \"vaccinated\",\n \"type\": \"checkbox\",\n \"display_name\": \"is vaccinated\"\n }\n]\n```\n\n3. Create form. It's a basic rendering object\n```python\nfrom django import forms\nfrom capybara_forms.forms import CapybaraFormsModelForm\nfrom .models import Advert\n\n\nclass AdvertForm(CapybaraFormsModelForm):\n # This fields from model will be rendered using form.render_form\n fields_in_model = ['title', 'price']\n\n # For custom placeholder\n title = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter title'}))\n\n class Meta:\n model = Advert\n fields = ('title', 'price')\n```\n\n4. Use this form in your view\n```python\nfrom django.shortcuts import render, get_object_or_404, redirect\n\nfrom .models import Category\nfrom .forms import AdvertForm\n\n\ndef add(request, category_id):\n category = get_object_or_404(Category, pk=category_id)\n if request.method == 'POST':\n form = AdvertForm(category, request.POST.dict())\n if form.is_valid():\n form.save()\n return redirect('/{0}/'.format(category_id))\n else:\n form = AdvertForm(category)\n\n return render(request, 'add.html', {\n 'form': form,\n })\n```\n\n5. Render form in your template.\nNote, that library uses [parsley](http://parsleyjs.org/)\nfor validation. All dependencies listed below\n```html\n
\n```\n\nResult form: