Refs #26709 -- Made Index raise ValueError on non-string fields.

This commit is contained in:
Hannes Ljungberg 2021-01-12 13:05:01 +01:00 committed by Mariusz Felisiak
parent c412d9af7e
commit 4c62cdaa10
2 changed files with 7 additions and 0 deletions

View File

@ -35,6 +35,8 @@ class Index:
raise ValueError('Index.fields and Index.opclasses must have the same number of elements.')
if not fields:
raise ValueError('At least one field is required to define an index.')
if not all(isinstance(field, str) for field in fields):
raise ValueError('Index.fields must contain only strings with field names.')
if include and not name:
raise ValueError('A covering index must be named.')
if not isinstance(include, (type(None), list, tuple)):

View File

@ -55,6 +55,11 @@ class SimpleIndexesTests(SimpleTestCase):
with self.assertRaisesMessage(ValueError, 'Index.fields must be a list or tuple.'):
models.Index(fields='title')
def test_index_fields_strings(self):
msg = 'Index.fields must contain only strings with field names.'
with self.assertRaisesMessage(ValueError, msg):
models.Index(fields=[models.F('title')])
def test_fields_tuple(self):
self.assertEqual(models.Index(fields=('title',)).fields, ['title'])