Made type inheritance a validation check for abstract references
This commit is contained in:
parent
013227323d
commit
f96e68cd11
@ -996,6 +996,14 @@ class ReferenceField(BaseField):
|
|||||||
self.error('You can only reference documents once they have been '
|
self.error('You can only reference documents once they have been '
|
||||||
'saved to the database')
|
'saved to the database')
|
||||||
|
|
||||||
|
if self.document_type._meta.get('abstract') and \
|
||||||
|
not isinstance(value, self.document_type):
|
||||||
|
self.error('%s is not an instance of abstract reference'
|
||||||
|
' type %s' % (value._class_name,
|
||||||
|
self.document_type._class_name)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def lookup_member(self, member_name):
|
def lookup_member(self, member_name):
|
||||||
return self.document_type._fields.get(member_name)
|
return self.document_type._fields.get(member_name)
|
||||||
|
|
||||||
|
@ -2331,6 +2331,31 @@ class FieldTest(unittest.TestCase):
|
|||||||
Sister.drop_collection()
|
Sister.drop_collection()
|
||||||
Brother.drop_collection()
|
Brother.drop_collection()
|
||||||
|
|
||||||
|
def test_abstract_reference_base_type(self):
|
||||||
|
"""Ensure that an an abstract reference fails validation when given a
|
||||||
|
Document that does not inherit from the abstract type.
|
||||||
|
"""
|
||||||
|
class Sibling(Document):
|
||||||
|
name = StringField()
|
||||||
|
meta = {"abstract": True}
|
||||||
|
|
||||||
|
class Brother(Sibling):
|
||||||
|
sibling = ReferenceField(Sibling)
|
||||||
|
|
||||||
|
class Mother(Document):
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
Brother.drop_collection()
|
||||||
|
Mother.drop_collection()
|
||||||
|
|
||||||
|
mother = Mother(name="Carol")
|
||||||
|
mother.save()
|
||||||
|
brother = Brother(name="Bob", sibling=mother)
|
||||||
|
self.assertRaises(ValidationError, brother.save)
|
||||||
|
|
||||||
|
Brother.drop_collection()
|
||||||
|
Mother.drop_collection()
|
||||||
|
|
||||||
def test_generic_reference(self):
|
def test_generic_reference(self):
|
||||||
"""Ensure that a GenericReferenceField properly dereferences items.
|
"""Ensure that a GenericReferenceField properly dereferences items.
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user