diff -pruN 2.3.0-3/.github/workflows/cicd.yml 3.0.1-1/.github/workflows/cicd.yml
--- 2.3.0-3/.github/workflows/cicd.yml	2024-03-08 19:09:34.000000000 +0000
+++ 3.0.1-1/.github/workflows/cicd.yml	2025-08-14 21:34:00.000000000 +0000
@@ -32,18 +32,38 @@ jobs:
           - 4.1.*
           - 4.2.*
           - 5.0.*
+          - 5.1.*
+          - 5.2.*
         python-version:
           - '3.8'
           - '3.9'
           - '3.10'
           - '3.11'
           - '3.12'
+          - '3.13'
         exclude:
-          # Django 5.0 only supports python 3.10+
+          # Django 4.2- doesn't support python 3.13
+          - django-version: 3.2.*
+            python-version: '3.13'
+          - django-version: 4.0.*
+            python-version: '3.13'
+          - django-version: 4.1.*
+            python-version: '3.13'
+          - django-version: 4.2.*
+            python-version: '3.13'
+          # Django 5.0+ only supports python 3.10+
           - django-version: 5.0.*
             python-version: '3.8'
           - django-version: 5.0.*
             python-version: '3.9'
+          - django-version: 5.1.*
+            python-version: '3.8'
+          - django-version: 5.1.*
+            python-version: '3.9'
+          - django-version: 5.2.*
+            python-version: '3.8'
+          - django-version: 5.2.*
+            python-version: '3.9'
     steps:
       - name: Checkout
         uses: actions/checkout@v4
@@ -62,7 +82,7 @@ jobs:
       - name: Test with pytest
         run: poetry run pytest --showlocals -vvv --cov-report=xml
       - name: Upload coverage to Codecov
-        uses: codecov/codecov-action@v4.1.0
+        uses: codecov/codecov-action@v5
         env:
           CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
   publish:
diff -pruN 2.3.0-3/debian/changelog 3.0.1-1/debian/changelog
--- 2.3.0-3/debian/changelog	2025-03-12 17:13:56.000000000 +0000
+++ 3.0.1-1/debian/changelog	2025-08-21 14:40:31.000000000 +0000
@@ -1,3 +1,13 @@
+django-choices-field (3.0.1-1) unstable; urgency=medium
+
+  * [d43b34d] New upstream version 3.0.1
+  * [fa71f34] d/control: Remove Rules-Requires-Root
+    he setting of Rules-Requires-Root: no is now default.
+  * [7074230] d/control: Bump Standards-Version to 4.7.2
+    No further changes needed.
+
+ -- Carsten Schoenert <c.schoenert@t-online.de>  Thu, 21 Aug 2025 16:40:31 +0200
+
 django-choices-field (2.3.0-3) unstable; urgency=medium
 
   * Team upload.
diff -pruN 2.3.0-3/debian/control 3.0.1-1/debian/control
--- 2.3.0-3/debian/control	2025-03-12 17:13:56.000000000 +0000
+++ 3.0.1-1/debian/control	2025-08-21 14:38:18.000000000 +0000
@@ -16,8 +16,7 @@ Build-Depends:
  python3-pytest-cov <!nocheck>,
  python3-pytest-django <!nocheck>,
  python3-typing-extensions <!nocheck>,
-Rules-Requires-Root: no
-Standards-Version: 4.7.0
+Standards-Version: 4.7.2
 Vcs-Browser: https://salsa.debian.org/python-team/packages/django-choices-field
 Vcs-Git: https://salsa.debian.org/python-team/packages/django-choices-field.git
 Homepage: https://github.com/bellini666/django-choices-field
diff -pruN 2.3.0-3/django_choices_field/fields.py 3.0.1-1/django_choices_field/fields.py
--- 2.3.0-3/django_choices_field/fields.py	2024-03-08 19:09:34.000000000 +0000
+++ 3.0.1-1/django_choices_field/fields.py	2025-08-14 21:34:00.000000000 +0000
@@ -1,6 +1,16 @@
 import functools
 import itertools
-from typing import Callable, ClassVar, Dict, Optional, Sequence, Type, cast
+from typing import (
+    Callable,
+    ClassVar,
+    Dict,
+    List,
+    Optional,
+    Sequence,
+    Tuple,
+    Type,
+    cast,
+)
 
 from django.core.exceptions import ValidationError
 from django.db import models
@@ -12,6 +22,10 @@ def _get_flag_description(descs: Sequenc
     return "|".join(str(desc) for desc in descs)
 
 
+def _get_integer_enum_members(choices: List[Tuple[int, str]]) -> Dict[str, int]:
+    return {desc.replace(" ", "_").upper(): value for value, desc in choices}
+
+
 try:
     from django.utils.functional import Promise, lazy
 except ImportError:  # pragma: nocover
@@ -32,23 +46,26 @@ class TextChoicesField(models.CharField)
 
     def __init__(
         self,
-        choices_enum: Type[models.TextChoices],
+        choices_enum: Optional[Type[models.TextChoices]] = None,
         verbose_name: Optional[str] = None,
         name: Optional[str] = None,
         **kwargs,
     ):
-        self.choices_enum = choices_enum
-        kwargs["choices"] = choices_enum.choices
-        kwargs.setdefault("max_length", max(len(c.value) for c in choices_enum))
+        if choices_enum is not None:
+            self.choices_enum = choices_enum
+            kwargs["choices"] = choices_enum.choices
+        elif "choices" in kwargs:
+            self.choices_enum = models.TextChoices(
+                "ChoicesEnum",
+                [(k, (k, v)) for k, v in kwargs["choices"]],
+            )
+        else:
+            raise TypeError("either of choices_enum or choices must be provided")
+        kwargs.setdefault("max_length", max(len(c[0]) for c in kwargs["choices"]))
         super().__init__(verbose_name=verbose_name, name=name, **kwargs)
 
-    def deconstruct(self):
-        name, path, args, kwargs = super().deconstruct()
-        kwargs["choices_enum"] = self.choices_enum
-        return name, path, args, kwargs
-
     def to_python(self, value):
-        if value is None:
+        if value in self.empty_values:
             return None
 
         try:
@@ -76,20 +93,21 @@ class IntegerChoicesField(models.Integer
 
     def __init__(
         self,
-        choices_enum: Type[models.IntegerChoices],
+        choices_enum: Optional[Type[models.IntegerChoices]] = None,
         verbose_name: Optional[str] = None,
         name: Optional[str] = None,
         **kwargs,
     ):
-        self.choices_enum = choices_enum
-        kwargs["choices"] = choices_enum.choices
+        if choices_enum is not None:
+            self.choices_enum = choices_enum
+            kwargs["choices"] = choices_enum.choices
+        elif "choices" in kwargs:
+            enum_members = _get_integer_enum_members(kwargs["choices"])
+            self.choices_enum = models.IntegerChoices("ChoicesEnum", enum_members)
+        else:
+            raise TypeError("either of choices_enum or choices must be provided")
         super().__init__(verbose_name=verbose_name, name=name, **kwargs)
 
-    def deconstruct(self):
-        name, path, args, kwargs = super().deconstruct()
-        kwargs["choices_enum"] = self.choices_enum
-        return name, path, args, kwargs
-
     def to_python(self, value):
         if value is None:
             return None
@@ -127,35 +145,38 @@ class IntegerChoicesFlagField(models.Int
 
     def __init__(
         self,
-        choices_enum: Type[IntegerChoicesFlag],
+        choices_enum: Optional[Type[IntegerChoicesFlag]] = None,
         verbose_name: Optional[str] = None,
         name: Optional[str] = None,
         **kwargs,
     ):
-        self.choices_enum = choices_enum
-
-        default_choices = choices_enum.choices
-        kwargs["choices"] = default_choices[:]
-        for i in range(1, len(default_choices)):
-            for combination in itertools.combinations(default_choices, i + 1):
-                value = functools.reduce(lambda a, b: a | b[0], combination, 0)
-
-                descs = [c[1] for c in combination]
-                if Promise is not None and any(isinstance(desc, Promise) for desc in descs):
-                    assert _get_flag_description_lazy is not None
-                    desc = _get_flag_description_lazy(descs)
-                else:
-                    desc = _get_flag_description(descs)
+        if choices_enum is not None:
+            self.choices_enum = choices_enum
 
-                kwargs["choices"].append((value, desc))
+            default_choices = choices_enum.choices
+            kwargs["choices"] = default_choices[:]
+            for i in range(1, len(default_choices)):
+                for combination in itertools.combinations(default_choices, i + 1):
+                    value = functools.reduce(lambda a, b: a | b[0], combination, 0)
+
+                    descs = [c[1] for c in combination]
+                    if Promise is not None and any(isinstance(desc, Promise) for desc in descs):
+                        assert _get_flag_description_lazy is not None
+                        desc = _get_flag_description_lazy(descs)
+                    else:
+                        desc = _get_flag_description(descs)
+
+                    kwargs["choices"].append((value, desc))
+        elif "choices" in kwargs:
+            default_choices_length = len(kwargs["choices"]).bit_length()
+            default_choices = [kwargs["choices"][i] for i in range(default_choices_length)]
+            enum_members = _get_integer_enum_members(default_choices)
+            self.choices_enum = models.IntegerChoices("ChoicesEnum", enum_members)
+        else:
+            raise TypeError("either of choices_enum or choices must be provided")
 
         super().__init__(verbose_name=verbose_name, name=name, **kwargs)
 
-    def deconstruct(self):
-        name, path, args, kwargs = super().deconstruct()
-        kwargs["choices_enum"] = self.choices_enum
-        return name, path, args, kwargs
-
     def to_python(self, value):
         if value is None:
             return None
diff -pruN 2.3.0-3/poetry.lock 3.0.1-1/poetry.lock
--- 2.3.0-3/poetry.lock	2024-03-08 19:09:34.000000000 +0000
+++ 3.0.1-1/poetry.lock	2025-08-14 21:34:00.000000000 +0000
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
 
 [[package]]
 name = "asgiref"
@@ -47,33 +47,33 @@ tzdata = ["tzdata"]
 
 [[package]]
 name = "black"
-version = "24.2.0"
+version = "24.3.0"
 description = "The uncompromising code formatter."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"},
-    {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"},
-    {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"},
-    {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"},
-    {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"},
-    {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"},
-    {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"},
-    {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"},
-    {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"},
-    {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"},
-    {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"},
-    {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"},
-    {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"},
-    {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"},
-    {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"},
-    {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"},
-    {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"},
-    {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"},
-    {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"},
-    {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"},
-    {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"},
-    {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"},
+    {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"},
+    {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"},
+    {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"},
+    {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"},
+    {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"},
+    {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"},
+    {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"},
+    {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"},
+    {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"},
+    {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"},
+    {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"},
+    {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"},
+    {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"},
+    {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"},
+    {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"},
+    {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"},
+    {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"},
+    {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"},
+    {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"},
+    {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"},
+    {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"},
+    {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"},
 ]
 
 [package.dependencies]
@@ -93,13 +93,13 @@ uvloop = ["uvloop (>=0.15.2)"]
 
 [[package]]
 name = "certifi"
-version = "2024.2.2"
+version = "2024.7.4"
 description = "Python package for providing Mozilla's CA Bundle."
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
-    {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
+    {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"},
+    {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"},
 ]
 
 [[package]]
@@ -310,13 +310,13 @@ toml = ["tomli"]
 
 [[package]]
 name = "django"
-version = "4.2.11"
+version = "4.2.16"
 description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "Django-4.2.11-py3-none-any.whl", hash = "sha256:ddc24a0a8280a0430baa37aff11f28574720af05888c62b7cfe71d219f4599d3"},
-    {file = "Django-4.2.11.tar.gz", hash = "sha256:6e6ff3db2d8dd0c986b4eec8554c8e4f919b5c1ff62a5b4390c17aff2ed6e5c4"},
+    {file = "Django-4.2.16-py3-none-any.whl", hash = "sha256:1ddc333a16fc139fd253035a1606bb24261951bbc3a6ca256717fa06cc41a898"},
+    {file = "Django-4.2.16.tar.gz", hash = "sha256:6f1616c2786c408ce86ab7e10f792b8f15742f7b7b7460243929cb371e7f1dad"},
 ]
 
 [package.dependencies]
@@ -359,13 +359,13 @@ test = ["pytest (>=6)"]
 
 [[package]]
 name = "idna"
-version = "3.6"
+version = "3.7"
 description = "Internationalized Domain Names in Applications (IDNA)"
 optional = false
 python-versions = ">=3.5"
 files = [
-    {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
-    {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
+    {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
+    {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
 ]
 
 [[package]]
@@ -502,13 +502,13 @@ testing = ["Django", "django-configurati
 
 [[package]]
 name = "requests"
-version = "2.31.0"
+version = "2.32.0"
 description = "Python HTTP for Humans."
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
-    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+    {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"},
+    {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"},
 ]
 
 [package.dependencies]
@@ -549,19 +549,18 @@ files = [
 
 [[package]]
 name = "sqlparse"
-version = "0.4.4"
+version = "0.5.0"
 description = "A non-validating SQL parser."
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
 files = [
-    {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"},
-    {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"},
+    {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"},
+    {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"},
 ]
 
 [package.extras]
-dev = ["build", "flake8"]
+dev = ["build", "hatch"]
 doc = ["sphinx"]
-test = ["pytest", "pytest-cov"]
 
 [[package]]
 name = "tomli"
@@ -609,13 +608,13 @@ files = [
 
 [[package]]
 name = "urllib3"
-version = "2.2.1"
+version = "2.2.2"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
-    {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
+    {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"},
+    {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"},
 ]
 
 [package.extras]
@@ -627,4 +626,4 @@ zstd = ["zstandard (>=0.18.0)"]
 [metadata]
 lock-version = "2.0"
 python-versions = ">=3.8,<4.0"
-content-hash = "83c089ed09170b01c40fdbe473b6afc8873cc8391d203e5010e58e6a9a100cd1"
+content-hash = "c9bba4a50bb895ffe92161d1b91ca7d328cde2f0565f9092b0173e80b4bf363c"
diff -pruN 2.3.0-3/pyproject.toml 3.0.1-1/pyproject.toml
--- 2.3.0-3/pyproject.toml	2024-03-08 19:09:34.000000000 +0000
+++ 3.0.1-1/pyproject.toml	2025-08-14 21:34:00.000000000 +0000
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "django-choices-field"
-version = "2.3.0"
+version = "3.0.1"
 description = "Django field that set/get django's new TextChoices/IntegerChoices enum."
 authors = ["Thiago Bellini Ribeiro <thiago@bellini.dev>"]
 license = "MIT"
@@ -10,23 +10,27 @@ repository = "https://github.com/bellini
 documentation = "https://django-choices-field.readthedocs.io"
 keywords = ["django", "enum"]
 classifiers = [
-  "Development Status :: 5 - Production/Stable",
-  "Environment :: Web Environment",
-  "Intended Audience :: Developers",
-  "License :: OSI Approved :: MIT License",
-  "Operating System :: OS Independent",
-  "Programming Language :: Python",
-  "Programming Language :: Python :: 3",
-  "Programming Language :: Python :: 3.8",
-  "Programming Language :: Python :: 3.9",
-  "Programming Language :: Python :: 3.10",
-  "Programming Language :: Python :: 3.11",
-  "Framework :: Django",
-  "Framework :: Django :: 3.2",
-  "Framework :: Django :: 4.0",
-  "Framework :: Django :: 4.1",
-  "Framework :: Django :: 4.2",
-  "Framework :: Django :: 5.0",
+    "Development Status :: 5 - Production/Stable",
+    "Environment :: Web Environment",
+    "Intended Audience :: Developers",
+    "License :: OSI Approved :: MIT License",
+    "Operating System :: OS Independent",
+    "Programming Language :: Python",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.8",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
+    "Framework :: Django",
+    "Framework :: Django :: 3.2",
+    "Framework :: Django :: 4.0",
+    "Framework :: Django :: 4.1",
+    "Framework :: Django :: 4.2",
+    "Framework :: Django :: 5.0",
+    "Framework :: Django :: 5.1",
+    "Framework :: Django :: 5.2",
 ]
 packages = [{ include = "django_choices_field" }]
 
@@ -36,9 +40,9 @@ django = ">=3.2"
 typing_extensions = ">=4.0.0"
 
 [tool.poetry.dev-dependencies]
-black = "^24.2.0"
+black = "^24.3.0"
 codecov = "^2.1.11"
-django = "^4.0"
+django = "^4.2"
 django-types = "^0.19.1"
 pytest = "^8.0.2"
 pytest-cov = "^4.0.0"
@@ -68,73 +72,73 @@ exclude = '''
 [tool.ruff]
 line-length = 100
 select = [
-  "E",
-  "F",
-  "W",
-  "I",
-  "N",
-  "D",
-  "UP",
-  "YTT",
-  "D2",
-  "D3",
-  "D4",
-  "BLE",
-  "B",
-  "A",
-  "COM",
-  "C4",
-  "DTZ",
-  "T10",
-  "EXE",
-  "ISC",
-  "ICN001",
-  "G",
-  "INP",
-  "PIE",
-  "T20",
-  "PYI",
-  "PT",
-  "Q",
-  "RET",
-  "SIM",
-  "TID",
-  "TCH",
-  "PTH",
-  "ERA",
-  "PGH",
-  "PL",
-  "RSE",
-  "RUF",
-  "TRY",
-  "SLF",
+    "E",
+    "F",
+    "W",
+    "I",
+    "N",
+    "D",
+    "UP",
+    "YTT",
+    "D2",
+    "D3",
+    "D4",
+    "BLE",
+    "B",
+    "A",
+    "COM",
+    "C4",
+    "DTZ",
+    "T10",
+    "EXE",
+    "ISC",
+    "ICN001",
+    "G",
+    "INP",
+    "PIE",
+    "T20",
+    "PYI",
+    "PT",
+    "Q",
+    "RET",
+    "SIM",
+    "TID",
+    "TCH",
+    "PTH",
+    "ERA",
+    "PGH",
+    "PL",
+    "RSE",
+    "RUF",
+    "TRY",
+    "SLF",
 ]
 ignore = [
-  "D1",
-  "D203",
-  "D213",
-  "TCH001",
-  "TCH002",
-  "TCH003",
-  "PGH003",
-  "PLR09",
-  "PLR2004",
-  "SLF001",
-  "TRY003",
+    "D1",
+    "D203",
+    "D213",
+    "TCH001",
+    "TCH002",
+    "TCH003",
+    "PGH003",
+    "PLR09",
+    "PLR2004",
+    "SLF001",
+    "TRY003",
 ]
 target-version = "py37"
 exclude = [
-  ".eggs",
-  ".git",
-  ".hg",
-  ".mypy_cache",
-  ".tox",
-  ".venv",
-  "__pycached__",
-  "_build",
-  "buck-out",
-  "build",
-  "dist",
+    ".eggs",
+    ".git",
+    ".hg",
+    ".mypy_cache",
+    ".tox",
+    ".venv",
+    "__pycached__",
+    "_build",
+    "buck-out",
+    "build",
+    "dist",
 ]
 
 [tool.ruff.isort]
diff -pruN 2.3.0-3/tests/test_fields.py 3.0.1-1/tests/test_fields.py
--- 2.3.0-3/tests/test_fields.py	2024-03-08 19:09:34.000000000 +0000
+++ 3.0.1-1/tests/test_fields.py	2025-08-14 21:34:00.000000000 +0000
@@ -177,6 +177,13 @@ def test_set_text_integer(db):
     assert m.i_field == 2
 
 
+def test_set_empty_value_text(db):
+    # Passing an empty value should not raise an error
+    m = MyModel()
+    m.c_field_nullable = ""
+    m.save()
+
+
 @pytest.mark.parametrize("v", [10, "abc"])
 def test_set_wrong_value_text(v, db):
     m = MyModel()
