{ "info": { "author": "Nikolay Zakharov", "author_email": "nikolay@desh.su", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": ".. image:: https://secure.travis-ci.org/freevoid/django-datafilters.png?branch=master\n :target: http://travis-ci.org/freevoid/django-datafilters\n\nAbstract\n========\n\nLibrary to implement reusable queryset filtering for django-powered websites.\n\nThis library provides a way to declaratively define filter specifications in a\ndjango-forms manner. Such forms can be used as ordinary django forms and they\nalso provides a method ``filter`` to perform filtering of arbitrary querysets.\n\nThis approach is somewhat differs from one in django-admin, but it looks more\nintuitive and straightforward for the author.\n\nMain features:\n\n* forms-based declaration and usage;\n* simple API;\n* easy to implement and reuse abstract filter specs of any complexity (from\n standard lookups to ``QuerySet.extra`` calls);\n* runtime-aware filtering;\n* a number of builtin specs for simple cases.\n\nUsage\n=====\n\nFor concrete usage example, see ``sample_proj/polls/views.py``.\n\nTo perform filtering one must define a subclass of\n``datafilters.filterform.FilterForm`` (base class for filter forms).\nThe typical declaration consists of class attributes declaring filter\nspecifications, subclasses of ``datafilters.filterspec.FilterSpec``.\nThis tandem is very much like the ``Form`` and ``Field`` pair.\n``FilterSpec`` subclass defines a corresponding form field that will be\nused to render and validate a django form and it also defines a method\nto get lookup conditions based on user input (``to_lookup``). There is\na bunch of builtin specs so typicaly it is not necessary to implement\nyour own filter specs for simple filtering.\n\nFor example purposes we will use models from django tutorial:\n``Choice`` and ``Question``.\n\nThe typical filter form looks like that::\n\n from datafilters.filterform import FilterForm\n from datafilters.specs import ContainsFilterSpec, \\\n SelectBoolFilterSpec\n\n class ChoicesFilterForm(FilterForm):\n choice_text = ContainsFilterSpec('choice',\n label='Choice contains text')\n question_text = ContainsFilterSpec('poll__question',\n label='Question contains text')\n has_votes = GreaterThanZeroFilterSpec('votes')\n\nDirect usage of filter form\n---------------------------\n\nDefined form can be used directly::\n\n from django.shortcuts import render_to_response\n from polls.models import Choice\n\n def choice_list(request):\n choices = Choice.objects.all()\n filterform = ChoicesFilterForm(request.GET)\n if filterform.is_valid():\n choices = filterform.filter(choices)\n\n return render_to_response('polls/choice_list.html',\n {\n 'choices': choices,\n 'filterform': filterform,\n })\n\n``filter_powered`` decorator\n----------------------------\n\nThere is a decorator to remove bottlenecks when using filtering extensively::\n\n from django.template.response import TemplateResponse\n from datafilters.decorators import filter_powered\n\n @filter_powered(ChoicesFilterForm, queryset_name='choices')\n def choice_list(request):\n choices = Choice.objects.all()\n return TemplateResponse('polls/choice_list.html',\n {'choices': choices})\n\nView mixin\n----------\n\nIf you are using django class-based views there is another option to take: a\nview mixin ``FilterFormMixin``. Example::\n\n from django.views.generic import ListView\n\n class ChoiceListView(FilterFormMixin, ListView):\n model = Choice\n filter_form_cls = ChoicesFilterForm\n\n choice_list = ChoiceListView.as_view()\n\nUsage in templates\n------------------\n\nIn our template we can use new context variable ``filterform`` as an ordinary\ndjango form::\n\n
\n {{ filterform.as_p }}\n \n
\n\nRequirements\n============\n\n* Django >= 1.3;\n* `django-forms-extras `_ for\n some of builtin specifications (optional).\n\nCopyright\n=========\n2010-2013, Nikolay Zakharov.", "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/freevoid/django-datafilters", "keywords": "django filter datafilter queryset", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "datafilters", "package_url": "https://pypi.org/project/datafilters/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/datafilters/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/freevoid/django-datafilters" }, "release_url": "https://pypi.org/project/datafilters/0.3.3/", "requires_dist": null, "requires_python": null, "summary": "Neat QuerySet filter for django apps with filterforms based on django forms", "version": "0.3.3" }, "last_serial": 823745, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5cb0de91341c2d4c9e45b70fb5d5d6d2", "sha256": "1a8aebbfd1e74e9514af1247d200dea7c1b7aeee4ef9c7089fbb274a132b2e89" }, "downloads": -1, "filename": "datafilters-0.1.0-py2.7.egg", "has_sig": true, "md5_digest": "5cb0de91341c2d4c9e45b70fb5d5d6d2", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 23331, "upload_time": "2011-05-02T22:43:45", "url": "https://files.pythonhosted.org/packages/3f/36/497885ed2bbcef52b60d7a7734720102fddc5f71cfde36b48a3d6f765b39/datafilters-0.1.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "92a3ae3657db21a02d18224f22f516f7", "sha256": "3559931ed1ff72212bd200dddffc3a9435cc23bbd5eb438375fcd691e571b57d" }, "downloads": -1, "filename": "datafilters-0.1.0.tar.gz", "has_sig": true, "md5_digest": "92a3ae3657db21a02d18224f22f516f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5700, "upload_time": "2011-05-02T22:42:57", "url": "https://files.pythonhosted.org/packages/f9/37/00a074479ebb62e4f195132d7210f9607a02afadcc8f3f3c18a8e4dfc0d0/datafilters-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4474938cd15a0e58fdcaa3b3e549f67d", "sha256": "49f9ece94a34fc2c7e1af617fc48ce56ffc7c7fdc829901eaa4e67e5562d7cb4" }, "downloads": -1, "filename": "datafilters-0.1.1-py2.7.egg", "has_sig": true, "md5_digest": "4474938cd15a0e58fdcaa3b3e549f67d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 24223, "upload_time": "2011-05-03T17:29:47", "url": "https://files.pythonhosted.org/packages/3e/f5/d63fcf0ce6c484e0911bd33e13c31410d6ba91e1ded79cd7cb4981424167/datafilters-0.1.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "03b41d2ac0418730336f5930a1260d82", "sha256": "b9249ad8888ec4b9cafc40205d4aaf849ca32e9b5c80ba4cce4457c08f18e24a" }, "downloads": -1, "filename": "datafilters-0.1.1.tar.gz", "has_sig": true, "md5_digest": "03b41d2ac0418730336f5930a1260d82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6874, "upload_time": "2011-05-03T17:29:43", "url": "https://files.pythonhosted.org/packages/2b/aa/af48e3acf659f73479f7a2bbcc1971e79d00dc1bda719730ece647fd4e61/datafilters-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "10be4b4ae68aad7a52f9fad14c5d9610", "sha256": "cf4be4854c2e91a6c7de7268e7afbdb4a2813d17075fb1d16f89aefaaa7c472f" }, "downloads": -1, "filename": "datafilters-0.1.2.tar.gz", "has_sig": false, "md5_digest": "10be4b4ae68aad7a52f9fad14c5d9610", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7842, "upload_time": "2011-09-12T09:48:53", "url": "https://files.pythonhosted.org/packages/93/b8/dc67bf7e662ce375551731876c27150246af3a22fa4eae343bcabdb15266/datafilters-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0b695a1dbd947946077a3def89269f4b", "sha256": "29b507dfbf4e40fbed2ba2ef5e55f825b9eb37b461aee365306c5ee9db46b32d" }, "downloads": -1, "filename": "datafilters-0.1.3.tar.gz", "has_sig": false, "md5_digest": "0b695a1dbd947946077a3def89269f4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7933, "upload_time": "2011-12-14T17:52:24", "url": "https://files.pythonhosted.org/packages/0f/d8/32f6b8514413d1cfc277310d80c246944a82da53a1a7cc3f22b236a679a2/datafilters-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "cf17ae035260a85f8f578143e574f806", "sha256": "224ea24dc707d61ba3788c97f19ea2e2c57dbd1cd728b6220a0bb51601ee2dea" }, "downloads": -1, "filename": "datafilters-0.1.4.tar.gz", "has_sig": false, "md5_digest": "cf17ae035260a85f8f578143e574f806", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7959, "upload_time": "2011-12-15T13:43:43", "url": "https://files.pythonhosted.org/packages/a0/e6/d2e8c762413e1bf23b727da4395b41852abc6c6e1e3ba6198d844ec87259/datafilters-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "d8d557900fa209be576e99f712228317", "sha256": "46ad89774270a530f32ee2416918fc6c78d6409cd488a15ae743b173419af707" }, "downloads": -1, "filename": "datafilters-0.1.5.tar.gz", "has_sig": false, "md5_digest": "d8d557900fa209be576e99f712228317", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7951, "upload_time": "2011-12-16T11:13:43", "url": "https://files.pythonhosted.org/packages/c2/56/489fea9594acfe9e0737debf160865662665bcd93c1bb8a1703b3c7c331e/datafilters-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "0dfda094ec9538a36b92cfb8d1d8f9b3", "sha256": "da2fb658e731ae90f9c65ace24608d480ebd1094538b9ae89848b51c91fb982b" }, "downloads": -1, "filename": "datafilters-0.1.6.tar.gz", "has_sig": false, "md5_digest": "0dfda094ec9538a36b92cfb8d1d8f9b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8268, "upload_time": "2012-03-19T16:32:25", "url": "https://files.pythonhosted.org/packages/7b/c5/d15b1e859c249f6edee0467d77d0f93700ca0845dfadc08c3848a3741a7f/datafilters-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "563d81c753c96d0d9ccf87bd1e783103", "sha256": "09567dec4905eb71e8791913f3edcb8a7257152f8158ca02cca623287f62fb07" }, "downloads": -1, "filename": "datafilters-0.1.7.tar.gz", "has_sig": false, "md5_digest": "563d81c753c96d0d9ccf87bd1e783103", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8276, "upload_time": "2012-03-20T09:43:27", "url": "https://files.pythonhosted.org/packages/69/d7/5dd8b425979602eb62bfedfc2c1e4e3ade4fe084bd57ffccd9113cbf8e1e/datafilters-0.1.7.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "46ebd89f478afc54d0a0c7919272d783", "sha256": "91e8ab0abf9dc991a99386a4a132fdae13098c9fd06394bc10d638768dd2c211" }, "downloads": -1, "filename": "datafilters-0.2.1.tar.gz", "has_sig": false, "md5_digest": "46ebd89f478afc54d0a0c7919272d783", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9804, "upload_time": "2012-07-27T17:12:55", "url": "https://files.pythonhosted.org/packages/21/cf/7290544916009131095e3f0c5da77a244299413b88e61e9cf21571c8ae36/datafilters-0.2.1.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "b4d44e655a06feb4e88296b1b2efb6b8", "sha256": "f805bcb6b3db6e9c2f10337c6e28a581140851a805ae2ad329093b67c73d03d9" }, "downloads": -1, "filename": "datafilters-0.3.1.tar.gz", "has_sig": false, "md5_digest": "b4d44e655a06feb4e88296b1b2efb6b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13658, "upload_time": "2012-08-27T18:06:46", "url": "https://files.pythonhosted.org/packages/cf/b7/ca1fee8706f4d5e5d06bfbde941bfbf397da21827ec1fb65662ef2b01dd2/datafilters-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "9a02a003966fc42653ecf0b7d7b814b1", "sha256": "75d2523a0c352703aacc48d034b463431195c423b9c5ffe63eea3f2850e28a06" }, "downloads": -1, "filename": "datafilters-0.3.2.win32.exe", "has_sig": false, "md5_digest": "9a02a003966fc42653ecf0b7d7b814b1", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 218314, "upload_time": "2013-02-08T07:33:44", "url": "https://files.pythonhosted.org/packages/ee/ad/5afd4e02f97add69f4cbfbf37a5cc591b5e99fd969d07bd6b3d7806fcbd1/datafilters-0.3.2.win32.exe" }, { "comment_text": "", "digests": { "md5": "934d8fb9607204def8079b608a72424f", "sha256": "674d1651b3dbc3f9227c560c3619cc4a8c2ea82e6d8156db80eec47cf9cce253" }, "downloads": -1, "filename": "datafilters-0.3.2.zip", "has_sig": false, "md5_digest": "934d8fb9607204def8079b608a72424f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24964, "upload_time": "2013-02-08T07:33:39", "url": "https://files.pythonhosted.org/packages/6a/d6/4285d3349bdd4012a4cd1dde338d7024342e8d3a194a866fdeccde967c8a/datafilters-0.3.2.zip" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "8cb719c008e6a2db0059b76057d41602", "sha256": "a50ffd7fe03cba099050897d9248c83a135e7a5a2f365e13463b1e67ebb6f351" }, "downloads": -1, "filename": "datafilters-0.3.3.win-amd64.exe", "has_sig": false, "md5_digest": "8cb719c008e6a2db0059b76057d41602", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 246036, "upload_time": "2013-07-24T08:39:07", "url": "https://files.pythonhosted.org/packages/f5/79/be1ca710f78b6b1c01237d7996b08c16caaa541ef2fc036c84480edb8763/datafilters-0.3.3.win-amd64.exe" }, { "comment_text": "", "digests": { "md5": "e8b49e80daec01d3637bcd58f2c0acc9", "sha256": "b51b7d14069a0d8b4ece67e663612d3e19ecdbf00858bb6e8196bebf05e161d8" }, "downloads": -1, "filename": "datafilters-0.3.3.zip", "has_sig": false, "md5_digest": "e8b49e80daec01d3637bcd58f2c0acc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25037, "upload_time": "2013-07-24T08:38:16", "url": "https://files.pythonhosted.org/packages/0c/fe/8e1b6ba798d7e0b7776d6e6c447b8f4c4f42c5737a11c70bfde7676f8cd6/datafilters-0.3.3.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8cb719c008e6a2db0059b76057d41602", "sha256": "a50ffd7fe03cba099050897d9248c83a135e7a5a2f365e13463b1e67ebb6f351" }, "downloads": -1, "filename": "datafilters-0.3.3.win-amd64.exe", "has_sig": false, "md5_digest": "8cb719c008e6a2db0059b76057d41602", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 246036, "upload_time": "2013-07-24T08:39:07", "url": "https://files.pythonhosted.org/packages/f5/79/be1ca710f78b6b1c01237d7996b08c16caaa541ef2fc036c84480edb8763/datafilters-0.3.3.win-amd64.exe" }, { "comment_text": "", "digests": { "md5": "e8b49e80daec01d3637bcd58f2c0acc9", "sha256": "b51b7d14069a0d8b4ece67e663612d3e19ecdbf00858bb6e8196bebf05e161d8" }, "downloads": -1, "filename": "datafilters-0.3.3.zip", "has_sig": false, "md5_digest": "e8b49e80daec01d3637bcd58f2c0acc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25037, "upload_time": "2013-07-24T08:38:16", "url": "https://files.pythonhosted.org/packages/0c/fe/8e1b6ba798d7e0b7776d6e6c447b8f4c4f42c5737a11c70bfde7676f8cd6/datafilters-0.3.3.zip" } ] }