{ "info": { "author": "un.def", "author_email": "un.def@ya.ru", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "Django JanySON\r\n==============\r\n\r\nStore additional model fields as JSON object in PostgreSQL's ``jsonb``\r\nfield and work with them as regular model fields. Need new\r\nboolean/text/foreign key/many-to-many/etc. field? Just add the decorator\r\nwith the field description to your model. It's all! No more annoying\r\nmigrations.\r\n\r\nInstallation\r\n~~~~~~~~~~~~\r\n\r\n- Install the package using ``pip install django-janyson``.\r\n- Add ``janyson`` to ``INSTALLED_APPS`` setting.\r\n\r\nRequirements\r\n~~~~~~~~~~~~\r\n\r\n- Python 2 or 3 (tested with 2.7+ and 3.3+)\r\n- Django 1.9+ with psycopg2\r\n- six\r\n\r\nExample\r\n~~~~~~~\r\n\r\n.. code:: python\r\n\r\n from django.db import models\r\n\r\n from janyson.decorators import add_fields\r\n from janyson.fields import JanySONField\r\n\r\n\r\n class Tag(models.Model):\r\n\r\n name = models.CharField(max_length=16)\r\n\r\n def __str__(self):\r\n return \"[Tag: {}]\".format(self.name)\r\n\r\n\r\n extra_fields = {\r\n 'desc': {'type': 'str'},\r\n 'qty': {'type': 'num', 'default': 0, 'use_default': True},\r\n 'avail': {'type': 'nullbool', 'use_default': True},\r\n 'main_tag': {'type': 'fk', 'model': Tag},\r\n 'tags': {'type': 'm2m', 'model': 'demo_app.Tag'},\r\n }\r\n\r\n common_options = {\r\n 'use_default': False,\r\n 'dir_hide': True,\r\n }\r\n\r\n @add_fields(extra_fields, field_options=common_options, janyson_field='extra')\r\n class Item(models.Model):\r\n\r\n name = models.CharField(max_length=64)\r\n extra = JanySONField(verbose_name='janyson field', default=dict,\r\n blank=True, null=True)\r\n\r\n def __str__(self):\r\n return \"[Item: {}]\".format(self.name)\r\n\r\n.. code:: python\r\n\r\n >>> from demo_app.models import Tag, Item\r\n\r\n >>> Tag.objects.create(name='tag1')\r\n >>> Tag.objects.create(name='tag2')\r\n >>> item = Item(name='test')\r\n\r\n >>> item\r\n \r\n >>> item.desc\r\n AttributeError: 'Item' object has no attribute 'desc'\r\n >>> item.qty\r\n 0\r\n >>> print(item.avail)\r\n None\r\n >>> item.tags\r\n AttributeError: 'Item' object has no attribute 'tags'\r\n\r\n >>> tags = Tag.objects.all()\r\n >>> item.desc = 'description'\r\n >>> item.qty = 100\r\n >>> item.avail = True\r\n >>> item.tags = tags\r\n >>> item.save()\r\n\r\n >>> del item\r\n >>> item = Item.objects.get(name='test')\r\n >>> item.desc\r\n 'description'\r\n >>> item.qty\r\n 100\r\n >>> item.avail\r\n True\r\n >>> item.tags\r\n [, , ]\r\n\r\nTests\r\n~~~~~\r\n\r\n``python runtests.py [-d TESTDBNAME] [-h HOSTNAME] [-p PORT] [-U USERNAME] [-P PASSWORD]``\r\n\r\nRun ``python runtests.py --help`` for additional info.\r\n\r\nDocumentation\r\n~~~~~~~~~~~~~\r\n\r\nComing soon.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/un-def/django-janyson", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "django-janyson", "package_url": "https://pypi.org/project/django-janyson/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-janyson/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/un-def/django-janyson" }, "release_url": "https://pypi.org/project/django-janyson/0.1.1/", "requires_dist": null, "requires_python": null, "summary": "Virtual model fields that are transparently mapped to Postgres jsonb", "version": "0.1.1" }, "last_serial": 2136948, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "21a5e94ed643a4b98e5bd4132198c6b4", "sha256": "7fcd72cc04a6f6edc2894231f32b1c6bef7c0f95395780dc871b2626b4e9bcee" }, "downloads": -1, "filename": "django-janyson-0.1.0.tar.gz", "has_sig": false, "md5_digest": "21a5e94ed643a4b98e5bd4132198c6b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10162, "upload_time": "2016-05-27T14:27:42", "url": "https://files.pythonhosted.org/packages/06/e1/5dd191fa9c5d9932c7135569b7f11371f6c3e06fe291bdbc62b73e652141/django-janyson-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "cf22110eb6d0d16928c81e58b9b0c617", "sha256": "58e532064ed0d1af7b5e7074051cda7851cd07d54ddd905a3c6503d4ceedfde5" }, "downloads": -1, "filename": "django-janyson-0.1.1.tar.gz", "has_sig": false, "md5_digest": "cf22110eb6d0d16928c81e58b9b0c617", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10015, "upload_time": "2016-05-27T14:35:46", "url": "https://files.pythonhosted.org/packages/fe/7d/1905bc8a40d5304e7c81b1c54c93839a6c0f465cc96ff49ade8ecc99ab92/django-janyson-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cf22110eb6d0d16928c81e58b9b0c617", "sha256": "58e532064ed0d1af7b5e7074051cda7851cd07d54ddd905a3c6503d4ceedfde5" }, "downloads": -1, "filename": "django-janyson-0.1.1.tar.gz", "has_sig": false, "md5_digest": "cf22110eb6d0d16928c81e58b9b0c617", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10015, "upload_time": "2016-05-27T14:35:46", "url": "https://files.pythonhosted.org/packages/fe/7d/1905bc8a40d5304e7c81b1c54c93839a6c0f465cc96ff49ade8ecc99ab92/django-janyson-0.1.1.tar.gz" } ] }