Skip to content

Commit d13b4f0

Browse files
authored
Merge pull request #62 from craigds/abstract-untyped
Allow abstract subclasses of TypedModel
2 parents 4b99c87 + 37c48c1 commit d13b4f0

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

testapp/models.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class UniqueIdentifier(models.Model):
1717

1818
class UniqueIdentifierMixin(models.Model):
1919
unique_identifiers = GenericRelation(
20-
UniqueIdentifier, related_query_name='referents'
20+
UniqueIdentifier, related_query_name="referents"
2121
)
2222

2323
class Meta:
@@ -100,12 +100,23 @@ class Vegetable(AbstractVegetable):
100100
pass
101101

102102

103-
class Parent(TypedModel):
103+
class SurpriseAbstractModel(TypedModel):
104+
"""
105+
This class *isn't* the typed base, it's a random abstract model.
106+
The presence of this model tests
107+
https://github.com/craigds/django-typed-models/issues/61
108+
"""
109+
110+
class Meta:
111+
abstract = True
112+
113+
114+
class Parent(SurpriseAbstractModel):
104115
a = models.CharField(max_length=1)
105116

106117

107118
class Child1(Parent):
108-
b = models.OneToOneField('self', null=True, on_delete=models.CASCADE)
119+
b = models.OneToOneField("self", null=True, on_delete=models.CASCADE)
109120

110121

111122
class Child2(Parent):

typedmodels/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def __new__(meta, classname, bases, classdict):
5050
while mro:
5151
base_class = mro.pop(-1)
5252
if issubclass(base_class, TypedModel) and base_class is not TypedModel:
53-
if base_class._meta.proxy:
53+
if base_class._meta.proxy or base_class._meta.abstract:
5454
# continue up the mro looking for non-proxy base classes
5555
mro.extend(base_class.__bases__)
5656
else:
@@ -188,7 +188,7 @@ def do_related_class(self, other, cls):
188188
superclass._typedmodels_subtypes.append(typ)
189189

190190
meta._patch_fields_cache(cls, base_class)
191-
else:
191+
elif not cls._meta.abstract:
192192
# this is the base class
193193
cls._typedmodels_registry = {}
194194

0 commit comments

Comments
 (0)