Skip to main content

Django field that set/get django's new TextChoices/IntegerChoices enum.

Project description

django-choices-field

build status coverage PyPI version python version django version

Django field that set/get django's new TextChoices/IntegerChoices enum.

Install

pip install django-choices-field

Usage

import enum

from django.db import models
from django_choices_field import TextChoicesField, IntegerChoicesField, IntegerChoicesFlag


class MyModel(models.Model):
    class TextEnum(models.TextChoices):
        FOO = "foo", "Foo Description"
        BAR = "bar", "Bar Description"

    class IntegerEnum(models.IntegerChoices):
        FIRST = 1, "First Description"
        SECOND = 2, "Second Description"

    class IntegerFlagEnum(IntegerChoicesFlag):
        FIRST = enum.auto(), "First Option"
        SECOND = enum.auto(), "Second Option"
        THIRD = enum.auto(), "Third Option"

    text_field = TextChoicesField(
        choices_enum=TextEnum,
        default=TextEnum.FOO,
    )
    integer_field = IntegerChoicesField(
        choices_enum=IntegerEnum,
        default=IntegerEnum.FIRST,
    )
    flag_field = IntegerChoicesFlagField(
        choices_enum=IntegerFlagEnum,
        default=IntegerFlagEnum.FIRST | IntegerFlagEnum.SECOND,
    )


obj = MyModel()
reveal_type(obj.text_field)  # MyModel.TextEnum.FOO
assert isinstance(obj.text_field, MyModel.TextEnum)
assert obj.text_field == "foo"

reveal_type(obj.integer_field)  # MyModel.IntegerEnum.FIRST
assert isinstance(obj.integer_field, MyModel.IntegerEnum)
assert obj.integer_field == 1

reveal_type(obj.flag_field)  # MyModel.IntegerFlagEnum.FIRST | MyModel.IntegerFlagEnum.SECOND
assert isinstance(obj.integer_field, MyModel.IntegerFlagEnum)
assert obj.flag_field == 3

NOTE: The IntegerChoicesFlag requires python 3.11+ to work properly.

License

This project is licensed under MIT licence (see LICENSE for more info)

Contributing

Make sure to have poetry installed.

Install dependencies with:

poetry install

Run the testsuite with:

poetry run pytest

Feel free to fork the project and send me pull requests with new features, corrections and translations. I'll gladly merge them and release new versions ASAP.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_choices_field-2.2.0.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

django_choices_field-2.2.0-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file django_choices_field-2.2.0.tar.gz.

File metadata

  • Download URL: django_choices_field-2.2.0.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.8.2 Linux/5.15.0-1039-azure

File hashes

Hashes for django_choices_field-2.2.0.tar.gz
Algorithm Hash digest
SHA256 b9a304cd16b554eb543081fef34d5c8b368a5085de869a61e3603a0a7580eac4
MD5 062228d59dbfc8a23053f6ed4b2b7f5e
BLAKE2b-256 aa8851d13985d614c70dc36ffe03beaee339cffd8181e54ec406d6c99766e8a6

See more details on using hashes here.

File details

Details for the file django_choices_field-2.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_choices_field-2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 968e8bb00f3e5569790e943b90f2bef69b387fd94d17d5a340341accbe5b45c6
MD5 1899c32a70e3c9ec4f8215a886bf0146
BLAKE2b-256 f2df42121b62aa40a12bde4e7d4c559406c7d6d97f37161c4f432099fdc891ce

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page