From 41e39c41c9225bc3cbd5f333694e0a4d113136be Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Tue, 23 Mar 2021 10:07:43 +0100 Subject: [PATCH] Refs #32460 -- Doc'd and tested that property names of model choice enums cannot be used as members. --- docs/ref/models/fields.txt | 5 +++++ tests/model_enums/tests.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index aedf115e08..e5332d4bfc 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -226,6 +226,11 @@ modifications: ``.choices``, ``.labels``, ``.values``, and ``.names`` -- to make it easier to access lists of those separate parts of the enumeration. Use ``.choices`` as a suitable value to pass to :attr:`~Field.choices` in a field definition. + + .. warning:: + + These property names cannot be used as member names as they would conflict. + * The use of :func:`enum.unique()` is enforced to ensure that values cannot be defined multiple times. This is unlikely to be expected in choices for a field. diff --git a/tests/model_enums/tests.py b/tests/model_enums/tests.py index ffc199ce42..3bfec1596a 100644 --- a/tests/model_enums/tests.py +++ b/tests/model_enums/tests.py @@ -155,6 +155,10 @@ class ChoicesTests(SimpleTestCase): output = template.render(Context({'Suit': Suit})) self.assertEqual(output, 'Diamond|1') + def test_property_names_conflict_with_member_names(self): + with self.assertRaises(AttributeError): + models.TextChoices('Properties', 'choices labels names values') + class Separator(bytes, models.Choices): FS = b'\x1c', 'File Separator'