{ "info": { "author": "Aric Coady", "author_email": "aric.coady@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django :: 1.11", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database :: Database Engines/Servers", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![image](https://img.shields.io/pypi/v/django-model-values.svg)](https://pypi.org/project/django-model-values/)\n[![image](https://img.shields.io/pypi/pyversions/django-model-values.svg)](https://python3statement.org)\n![image](https://img.shields.io/pypi/djversions/django-model-values.svg)\n[![image](https://pepy.tech/badge/django-model-values)](https://pepy.tech/project/django-model-values)\n![image](https://img.shields.io/pypi/status/django-model-values.svg)\n[![image](https://img.shields.io/travis/coady/django-model-values.svg)](https://travis-ci.org/coady/django-model-values)\n[![image](https://img.shields.io/codecov/c/github/coady/django-model-values.svg)](https://codecov.io/github/coady/django-model-values)\n[![image](https://readthedocs.org/projects/django-model-values/badge)](https://django-model-values.readthedocs.io)\n[![image](https://requires.io/github/coady/django-model-values/requirements.svg)](https://requires.io/github/coady/django-model-values/requirements/)\n[![image](https://api.codeclimate.com/v1/badges/908dc0b46fdda69109ce/maintainability)](https://codeclimate.com/github/coady/django-model-values/maintainability)\n\n[Django](https://docs.djangoproject.com) model utilities for encouraging\ndirect data access instead of unnecessary object overhead. Implemented\nthrough compatible method and operator extensions to `QuerySets` and\n`Managers`.\n\nThe goal is to provide elegant syntactic support for best practices in\nusing Django's ORM. Specifically avoiding the inefficiencies and race\nconditions associated with always using objects.\n\n# Usage\n\nTypical model usage is verbose, inefficient, and incorrect.\n\n```python\nbook = Book.objects.get(pk=pk)\nbook.rating = 5.0\nbook.save()\n```\n\nThe correct method is generally supported, but arguably less readable.\n\n```python\nBook.objects.filter(pk=pk).update(rating=5.0)\n```\n\n`model_values` encourages the better approach with operator support.\n\n```python\nBook.objects[pk]['rating'] = 5.0\n```\n\nSimilarly for queries:\n\n```python\n(book.rating for book in books)\nbooks.values_list('rating', flat=True)\nbooks['rating']\n```\n\nColumn-oriented syntax is common in panel data layers, and the greater\nexpressiveness cascades. `QuerySets` also support aggregation and\nconditionals.\n\n```python\nbooks.values_list('rating', flat=True).filter(rating__gt=0)\nbooks['rating'] > 0\n\nbooks.aggregate(models.Avg('rating'))['rating__avg']\nbooks['rating'].mean()\n```\n\n`Managers` provide a variety of efficient primary key based utilities.\nTo enable, instantiate the `Manager` in your models. As with any custom\n`Manager`, it doesn't have to be named `objects`, but it is designed to\nbe a 100% compatible replacement.\n\n```python\nfrom model_values import Manager\n\nclass Book(models.Model):\n ...\n objects = Manager()\n```\n\n`F` expressions are also enhanced, and can be used directly without\nmodel changes.\n\n```python\nfrom model_values import F\n\n.filter(rating__gt=0, last_modified__range=(start, end))\n.filter(F.rating > 0, F.last_modified.range(start, end))\n```\n\n# Installation\n\n $ pip install django-model-values\n\n# Tests\n100% branch coverage.\n\n $ pytest [--cov]\n\n# Changes\n1.0\n* Update related methods moved with deprecation warnings\n* Extensible change detection and updates\n* Django 2.2 functions\n\n0.6\n* Transform functions\n* Named tuples\n* Window functions\n* Distance lookups\n* Django 2.1 functions\n* `EnumField`\n* Annotated `items`\n* Expressions in column selection\n\n0.5\n* `F` expressions operators `any` and `all`\n* Spatial lookups and functions\n* Django 2.0 support\n\n0.4\n* `upsert` method\n* Django 1.9 database functions\n* `bulk_update` supports additional fields\n\n0.3\n* Lookup methods and operators\n* `F` expressions and aggregation methods\n* Database functions\n* Conditional expressions for updates and annotations\n* Bulk updates and change detection\n\n0.2\n* Change detection\n* Groupby functionality\n* Named tuples\n\n\n", "description_content_type": "text/markdown", "docs_url": "https://pythonhosted.org/django-model-values/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/coady/django-model-values", "keywords": "values_list pandas column-oriented data mapper pattern orm", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "django-model-values", "package_url": "https://pypi.org/project/django-model-values/", "platform": "", "project_url": "https://pypi.org/project/django-model-values/", "project_urls": { "Documentation": "https://django-model-values.readthedocs.io", "Homepage": "https://github.com/coady/django-model-values" }, "release_url": "https://pypi.org/project/django-model-values/1.0/", "requires_dist": [ "django (>=1.11)" ], "requires_python": ">=2.7", "summary": "Taking the O out of ORM.", "version": "1.0" }, "last_serial": 5028484, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d65c89f20295297ccd747a763ca10a98", "sha256": "5c91e6e763a22e0babdccde55ee0671fb1b555498249fb149dfbc154fb44ebb9" }, "downloads": -1, "filename": "django-model-values-0.1.tar.gz", "has_sig": false, "md5_digest": "d65c89f20295297ccd747a763ca10a98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14044, "upload_time": "2015-09-06T00:03:11", "url": "https://files.pythonhosted.org/packages/05/ff/2cd79a2b5b104b8bd1835b8da3533ca18808ea8c128c0685795576fe3a62/django-model-values-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "9629b79ff3a5dc06754bde6cf402b03c", "sha256": "3a68b89886d5251d65183c32d5f7a2f0a6b6b61b99c0b18f2cfc509208eea444" }, "downloads": -1, "filename": "django-model-values-0.2.tar.gz", "has_sig": false, "md5_digest": "9629b79ff3a5dc06754bde6cf402b03c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16153, "upload_time": "2015-09-26T20:06:12", "url": "https://files.pythonhosted.org/packages/9c/6b/eb3f2a80b2193b0339c1103c85079443189872db14ac7d56a4445d5ee044/django-model-values-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "5a40028a5a8e11f65d3fc37c3555fa1f", "sha256": "8ca1375314f80f8effb72a8d9c91d3cba3df32ed5a7a54caf2262f567d7da616" }, "downloads": -1, "filename": "django-model-values-0.3.tar.gz", "has_sig": false, "md5_digest": "5a40028a5a8e11f65d3fc37c3555fa1f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18274, "upload_time": "2015-12-02T01:18:13", "url": "https://files.pythonhosted.org/packages/11/f5/566dbb1ba508b936d91b70aec77fb142e1ef6e81181808aa48956fd07fcd/django-model-values-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "9962fb8ecc46241eee540f3f229d4958", "sha256": "50641289752c855eff69798d2caaeef92e232a23600466412de18d806052b580" }, "downloads": -1, "filename": "django-model-values-0.4.tar.gz", "has_sig": false, "md5_digest": "9962fb8ecc46241eee540f3f229d4958", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19247, "upload_time": "2016-04-29T20:03:24", "url": "https://files.pythonhosted.org/packages/c0/7b/60edfe86b12022298a42576cfe98319a93481791fc5d555866c545000bea/django-model-values-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "52817b8d657a651b4e45d9558b2ddb81", "sha256": "45e4f7d07f3cc0faa7b1e0d42ba0cadcbc81eaf3eb83190f2555c89fc215d4af" }, "downloads": -1, "filename": "django_model_values-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52817b8d657a651b4e45d9558b2ddb81", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=2.7, >=3.4", "size": 10509, "upload_time": "2017-11-29T03:20:51", "url": "https://files.pythonhosted.org/packages/bc/57/60eb78c57ae65364e7ec9356862ec130e6cbfb260315447958ff46fe5a86/django_model_values-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd3e4ce229d0c160f64303630c32ce76", "sha256": "1c79dd6d8cc4e975850cf2d58b9fd48eb8d00c4d02c06ed9951703dea9ecc0a2" }, "downloads": -1, "filename": "django-model-values-0.5.tar.gz", "has_sig": false, "md5_digest": "bd3e4ce229d0c160f64303630c32ce76", "packagetype": "sdist", "python_version": "source", "requires_python": "~=2.7, >=3.4", "size": 22243, "upload_time": "2017-11-29T03:20:52", "url": "https://files.pythonhosted.org/packages/56/04/ec83d990ab3658bc8b969886be31f4d255e014c81543b8cb2be7fa36a170/django-model-values-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "1f300b6f314d7cedd17ffd625cada64e", "sha256": "7674de4ce4ab0f3fc5faf92f4b9d975bbf9fca2eba1725d4ce8f5bff1046ae8e" }, "downloads": -1, "filename": "django_model_values-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f300b6f314d7cedd17ffd625cada64e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10492, "upload_time": "2017-12-12T01:43:15", "url": "https://files.pythonhosted.org/packages/00/3f/efe20970cf5fe2286f2a5ab4912189e3291ea91e211011723b09b548a1bc/django_model_values-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7963559f8242b8391edf9ed4ddd49cd8", "sha256": "78b736bbc0dfea7e3bd03cb52770f93a993df2de5ed65339afd1e3f9220d6bc0" }, "downloads": -1, "filename": "django-model-values-0.5.1.tar.gz", "has_sig": false, "md5_digest": "7963559f8242b8391edf9ed4ddd49cd8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 22203, "upload_time": "2017-12-12T01:43:16", "url": "https://files.pythonhosted.org/packages/12/f1/c4c0a62f0f88e0907198fe18af3a0a29f1dae9d871db26ca9edb76181b59/django-model-values-0.5.1.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "2f8daffd9cfb5b50c810bad4434890ff", "sha256": "d66b65a0c0a33463072e14420f664adf5d3d8be39bee2d63d1b9d056bc8b7875" }, "downloads": -1, "filename": "django_model_values-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2f8daffd9cfb5b50c810bad4434890ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 9179, "upload_time": "2018-08-02T00:16:49", "url": "https://files.pythonhosted.org/packages/1d/65/1d0bfffaeba3ca824ceccacca2f9242e64a1eb0b228191cc514fadf14e69/django_model_values-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a296b9907c6195b9b264162d34ac4c8", "sha256": "b7d41d70d75a999df98a29e7df9268c8da15374a9678d232efff265379ad6cd9" }, "downloads": -1, "filename": "django-model-values-0.6.tar.gz", "has_sig": false, "md5_digest": "4a296b9907c6195b9b264162d34ac4c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 22979, "upload_time": "2018-08-02T00:16:51", "url": "https://files.pythonhosted.org/packages/a7/c5/e2375826e084e3f1f1ab90dd33f4c681b01fd5ea5d73db0b7b630a4eed42/django-model-values-0.6.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "249545eabf4cba17de3f88026593dd32", "sha256": "e7d89009b7beea5f8e549e4ba30281946680d9ebf01b740df3f88897dfe494d2" }, "downloads": -1, "filename": "django_model_values-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "249545eabf4cba17de3f88026593dd32", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10319, "upload_time": "2019-04-01T15:56:50", "url": "https://files.pythonhosted.org/packages/c2/cc/a33249067d99327b57a279f4b0989af2f34dd39f6bc9734316a8174a9ece/django_model_values-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9365fe6a13cbabe846be1450293d49d4", "sha256": "68ccc6198926bcc35504dcba72d830ec3c74347750189a5d24e8d8576be0a81d" }, "downloads": -1, "filename": "django-model-values-1.0.tar.gz", "has_sig": false, "md5_digest": "9365fe6a13cbabe846be1450293d49d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 24591, "upload_time": "2019-04-01T15:56:52", "url": "https://files.pythonhosted.org/packages/ac/4c/fb69397ab8385b6539b98a4deabac75f19a29a76b70ba677f8a771c79e47/django-model-values-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "249545eabf4cba17de3f88026593dd32", "sha256": "e7d89009b7beea5f8e549e4ba30281946680d9ebf01b740df3f88897dfe494d2" }, "downloads": -1, "filename": "django_model_values-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "249545eabf4cba17de3f88026593dd32", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10319, "upload_time": "2019-04-01T15:56:50", "url": "https://files.pythonhosted.org/packages/c2/cc/a33249067d99327b57a279f4b0989af2f34dd39f6bc9734316a8174a9ece/django_model_values-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9365fe6a13cbabe846be1450293d49d4", "sha256": "68ccc6198926bcc35504dcba72d830ec3c74347750189a5d24e8d8576be0a81d" }, "downloads": -1, "filename": "django-model-values-1.0.tar.gz", "has_sig": false, "md5_digest": "9365fe6a13cbabe846be1450293d49d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 24591, "upload_time": "2019-04-01T15:56:52", "url": "https://files.pythonhosted.org/packages/ac/4c/fb69397ab8385b6539b98a4deabac75f19a29a76b70ba677f8a771c79e47/django-model-values-1.0.tar.gz" } ] }