Skip to content

Commit e1dbefc

Browse files
committed
Raise exception for models defining discriminator value, but no column
1 parent b39daa1 commit e1dbefc

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

cassandra/cqlengine/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,9 @@ def _transform_column(col_name, col_obj):
796796
if len(discriminator_columns) > 1:
797797
raise ModelDefinitionException('only one discriminator_column (polymorphic_key (deprecated)) can be defined in a model, {} found'.format(len(discriminator_columns)))
798798

799+
if attrs['__discriminator_value__'] and not is_polymorphic:
800+
raise ModelDefinitionException('__discriminator_value__ specified, but no base columns defined with discriminator_column=True')
801+
799802
discriminator_column_name, discriminator_column = discriminator_columns[0] if discriminator_columns else (None, None)
800803

801804
if isinstance(discriminator_column, (columns.BaseContainerColumn, columns.Counter)):

tests/integration/cqlengine/model/test_polymorphism.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ class M(models.Model):
3333
type1 = columns.Integer(polymorphic_key=True)
3434
type2 = columns.Integer(polymorphic_key=True)
3535

36+
def test_no_polymorphic_key_column_failure(self):
37+
with self.assertRaises(models.ModelDefinitionException):
38+
class M(models.Model):
39+
__polymorphic_key__ = 1
40+
3641
def test_polymorphic_key_inheritance(self):
3742
""" Tests that polymorphic_key attribute is not inherited """
3843
class Base(models.Model):
@@ -264,6 +269,11 @@ class M(models.Model):
264269
type1 = columns.Integer(discriminator_column=True)
265270
type2 = columns.Integer(discriminator_column=True)
266271

272+
def test_no_discriminator_column_failure(self):
273+
with self.assertRaises(models.ModelDefinitionException):
274+
class M(models.Model):
275+
__discriminator_value__ = 1
276+
267277
def test_discriminator_value_inheritance(self):
268278
""" Tests that discriminator_column attribute is not inherited """
269279
class Base(models.Model):

0 commit comments

Comments
 (0)