{ "info": { "author": "Andrey Kolotev", "author_email": "kolotev@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "django-enumfield-named-choices\n==============================\n\nThi package is based on `django-enumfield`.\nIt was extended to make django form filters happy\nat the time of validating input for named attributes\nrather than for enumerated values like 1,2,...\n\n.. image:: https://img.shields.io/pypi/v/django-enumfield-named-choices.svg\n :target: https://pypi.python.org/pypi/django-enumfield-named-choices\n\n.. image:: https://img.shields.io/pypi/l/django-enumfield-named-choices.svg\n :target: https://pypi.python.org/pypi/django-enumfield-named-choices\n\n.. image:: https://img.shields.io/pypi/pyversions/django-enumfield-named-choices.svg\n :target: https://pypi.python.org/pypi/django-enumfield-named-choices\n\n.. image:: https://img.shields.io/pypi/wheel/django-enumfield-named-choices.svg\n :target: https://pypi.python.org/pypi/django-enumfield-named-choices\n\n\nInstallation\n------------\n\nInstall ``django-enumfield-named-choices`` in your Python environment:\n\n.. code:: sh\n\n $ pip install django-enumfield-named-choices\n\n\nUsage\n-----\n\nCreate an Enum-class and pass it as first argument to the Django model EnumField.\n\n.. code:: python\n\n from django.db import models\n from django_enumfield_named_choices import enum\n\n class BeerStyle(enum.Enum):\n LAGER = 0\n STOUT = 1\n WEISSBIER = 2\n\n class Beer(models.Model):\n style = enum.EnumField(BeerStyle, default=BeerStyle.LAGER)\n\n.. code:: python\n\n Beer.objects.create(style=BeerStyle.STOUT)\n Beer.objects.filter(style=BeerStyle.STOUT)\n\nYou can use your own labels for Enum items\n\n.. code:: python\n\n class Animals(enum.Enum):\n CAT = 1\n DOG = 2\n\n labels = {\n CAT: 'Cat',\n DOG: 'Dog'\n }\n\nThe Enum-class provides the possibility to use transition validation.\n\n.. code:: python\n\n from django.db import models\n from django_enumfield_named_choices import enum\n\n class PersonStatus(enum.Enum):\n ALIVE = 1\n DEAD = 2\n REANIMATED = 3\n\n _transitions = {\n DEAD: (ALIVE,),\n REANIMATED: (DEAD,)\n }\n\n class Person(models.Model):\n status = enum.EnumField(PersonStatus)\n\nThese transitions state that a PersonStatus can only go to DEAD from ALIVE and to REANIMATED from DEAD.\n\n.. code:: python\n\n person = Person.objects.create(status=PersonStatus.ALIVE)\n try:\n person.status = PersonStatus.REANIMATED\n person.save()\n except InvalidStatusOperationError:\n print(\"Person status can not go from ALIVE to REANIMATED\")\n\nThe Enum-class can also be used without the EnumField. This is very useful in Django form ChoiceFields.\n\n.. code:: python\n\n from django.forms import Form\n from django_enumfield_named_choices import enum\n\n class GenderEnum(enum.Enum):\n MALE = 1\n FEMALE = 2\n\n labels = {\n MALE: 'Male',\n FEMALE: 'Female',\n }\n\n class PersonForm(forms.Form)\n gender = forms.TypedChoiceField(choices=GenderEnum.choices(), coerce=int)\n\nRendering PersonForm in a template will generate a select-box with \"Male\" and \"Female\" as option labels for the gender field.\n\nIf you want to use this package along with `django restful framework` and `django-filter`,\n`django-url-filter`, and `djangorestframework-filters` packages to make filtering on the named\nvalues of Enum type instead of their numerical counterparts you can use extra attribute on your\nenum type `interface` with value type `str`, by default it is set to `int` type as following.\n\n.. code:: python\n\n # in enums.py\n\n from django_enumfield_named_choices import enum\n\n class GenderEnum(enum.Enum):\n MALE = 1\n FEMALE = 2\n\n labels = {\n MALE: 'Male',\n FEMALE: 'Female',\n }\n\n interface = str\n\n # in models.py\n\n from django_enumfield_named_choices.db.fields import EnumField\n\n class Person(models.Model):\n name = ...\n gender = EnumField(GenderEnum)\n\n # and then when you expose you model through API endpoint\n # you can filter it with following URL request\n # /person/?gender=male\n # instead of\n # /person/?gender=1\n # thought the actual values of enum in the database are still integers.\n\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/kolotev/django-enumfield-named-choices/tarball/1.0a2", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/kolotev/django-enumfield-named-choices", "keywords": "django,enum,field,status,state,choices,form,model", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-enumfield-named-choices", "package_url": "https://pypi.org/project/django-enumfield-named-choices/", "platform": "any", "project_url": "https://pypi.org/project/django-enumfield-named-choices/", "project_urls": { "Download": "https://github.com/kolotev/django-enumfield-named-choices/tarball/1.0a2", "Homepage": "http://github.com/kolotev/django-enumfield-named-choices" }, "release_url": "https://pypi.org/project/django-enumfield-named-choices/1.0a2/", "requires_dist": null, "requires_python": "", "summary": "Custom Django field for using enumerations of named constants", "version": "1.0a2" }, "last_serial": 5716819, "releases": { "1.0a1": [ { "comment_text": "", "digests": { "md5": "c9e461172ef674e32d2867d0516820ec", "sha256": "dc0dc76cf782406d824526a75663fce5114e211461765151839bc3a6dcb06c9f" }, "downloads": -1, "filename": "django_enumfield_named_choices-1.0a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c9e461172ef674e32d2867d0516820ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37258, "upload_time": "2019-08-21T00:42:03", "url": "https://files.pythonhosted.org/packages/c9/01/568855883f49882e40038c33246f65c7c071ba087a52358ad3fc6c4c0f0e/django_enumfield_named_choices-1.0a1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2adcd160143e5aa2a0793d4aeb8e4a0", "sha256": "85fe7ff244130cb3225d43d95d6258bc328d4747cdb878f185b71ec8f7773576" }, "downloads": -1, "filename": "django-enumfield-named-choices-1.0a1.tar.gz", "has_sig": false, "md5_digest": "f2adcd160143e5aa2a0793d4aeb8e4a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26771, "upload_time": "2019-08-21T00:42:07", "url": "https://files.pythonhosted.org/packages/52/f4/02625d4d6d37bd8ca40074310a07dfee31e2769f343b9a6205fc47a8443a/django-enumfield-named-choices-1.0a1.tar.gz" } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "ec9b55c14f7596ce0a9a77b553aa16ce", "sha256": "f9ee98e22d34111b48d123bc09ad3db34f7870e67dbead4afdb73265ccbfa259" }, "downloads": -1, "filename": "django_enumfield_named_choices-1.0a2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec9b55c14f7596ce0a9a77b553aa16ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37277, "upload_time": "2019-08-22T19:00:33", "url": "https://files.pythonhosted.org/packages/a3/15/1e8a603515df4665fac730a576ccf9a3efd702a74f7dd197631eeec45fff/django_enumfield_named_choices-1.0a2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b349a817dafa244ca03a7e9166814529", "sha256": "5f64846c74b61e5a893db8fbc8f37851d8abd90e3d9b2c30ed470e564843efe4" }, "downloads": -1, "filename": "django-enumfield-named-choices-1.0a2.tar.gz", "has_sig": false, "md5_digest": "b349a817dafa244ca03a7e9166814529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26785, "upload_time": "2019-08-22T19:00:34", "url": "https://files.pythonhosted.org/packages/92/62/2b1c8552caefe62781ab1fa971029ebfe331a66046cbff0e075a74dca001/django-enumfield-named-choices-1.0a2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec9b55c14f7596ce0a9a77b553aa16ce", "sha256": "f9ee98e22d34111b48d123bc09ad3db34f7870e67dbead4afdb73265ccbfa259" }, "downloads": -1, "filename": "django_enumfield_named_choices-1.0a2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec9b55c14f7596ce0a9a77b553aa16ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37277, "upload_time": "2019-08-22T19:00:33", "url": "https://files.pythonhosted.org/packages/a3/15/1e8a603515df4665fac730a576ccf9a3efd702a74f7dd197631eeec45fff/django_enumfield_named_choices-1.0a2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b349a817dafa244ca03a7e9166814529", "sha256": "5f64846c74b61e5a893db8fbc8f37851d8abd90e3d9b2c30ed470e564843efe4" }, "downloads": -1, "filename": "django-enumfield-named-choices-1.0a2.tar.gz", "has_sig": false, "md5_digest": "b349a817dafa244ca03a7e9166814529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26785, "upload_time": "2019-08-22T19:00:34", "url": "https://files.pythonhosted.org/packages/92/62/2b1c8552caefe62781ab1fa971029ebfe331a66046cbff0e075a74dca001/django-enumfield-named-choices-1.0a2.tar.gz" } ] }