Refs #32460 -- Doc'd and tested that property names of model choice enums cannot be used as members.

This commit is contained in:
Nick Pope 2021-03-23 10:07:43 +01:00 committed by Mariusz Felisiak
parent 4894a97578
commit 41e39c41c9
2 changed files with 9 additions and 0 deletions

View File

@ -226,6 +226,11 @@ modifications:
``.choices``, ``.labels``, ``.values``, and ``.names`` -- to make it easier ``.choices``, ``.labels``, ``.values``, and ``.names`` -- to make it easier
to access lists of those separate parts of the enumeration. Use ``.choices`` 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. 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 * 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 defined multiple times. This is unlikely to be expected in choices for a
field. field.

View File

@ -155,6 +155,10 @@ class ChoicesTests(SimpleTestCase):
output = template.render(Context({'Suit': Suit})) output = template.render(Context({'Suit': Suit}))
self.assertEqual(output, 'Diamond|1') 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): class Separator(bytes, models.Choices):
FS = b'\x1c', 'File Separator' FS = b'\x1c', 'File Separator'