91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
from django.db import models
|
|
|
|
from polymorphic import PolymorphicModel, PolymorphicManager, PolymorphicQuerySet, ShowFields, ShowFieldsAndTypes
|
|
|
|
class PlainA(models.Model):
|
|
field1 = models.CharField(max_length=10)
|
|
class PlainB(PlainA):
|
|
field2 = models.CharField(max_length=10)
|
|
class PlainC(PlainB):
|
|
field3 = models.CharField(max_length=10)
|
|
|
|
class ModelA(PolymorphicModel):
|
|
field1 = models.CharField(max_length=10)
|
|
class ModelB(ModelA):
|
|
field2 = models.CharField(max_length=10)
|
|
class ModelC(ModelB):
|
|
field3 = models.CharField(max_length=10)
|
|
|
|
class Base(PolymorphicModel):
|
|
field_b = models.CharField(max_length=10)
|
|
class ModelX(Base):
|
|
field_x = models.CharField(max_length=10)
|
|
class ModelY(Base):
|
|
field_y = models.CharField(max_length=10)
|
|
|
|
class Enhance_Plain(models.Model):
|
|
field_p = models.CharField(max_length=10)
|
|
class Enhance_Base(ShowFieldsAndTypes, PolymorphicModel):
|
|
field_b = models.CharField(max_length=10)
|
|
class Enhance_Inherit(Enhance_Base, Enhance_Plain):
|
|
field_i = models.CharField(max_length=10)
|
|
|
|
|
|
class DiamondBase(models.Model):
|
|
field_b = models.CharField(max_length=10)
|
|
class DiamondX(DiamondBase):
|
|
field_x = models.CharField(max_length=10)
|
|
class DiamondY(DiamondBase):
|
|
field_y = models.CharField(max_length=10)
|
|
class DiamondXY(DiamondX, DiamondY):
|
|
pass
|
|
|
|
class RelationBase(ShowFieldsAndTypes, PolymorphicModel):
|
|
field_base = models.CharField(max_length=10)
|
|
fk = models.ForeignKey('self', null=True)
|
|
m2m = models.ManyToManyField('self')
|
|
class RelationA(RelationBase):
|
|
field_a = models.CharField(max_length=10)
|
|
class RelationB(RelationBase):
|
|
field_b = models.CharField(max_length=10)
|
|
class RelationBC(RelationB):
|
|
field_c = models.CharField(max_length=10)
|
|
|
|
class RelatingModel(models.Model):
|
|
many2many = models.ManyToManyField(ModelA)
|
|
|
|
class MyManager(PolymorphicManager):
|
|
def get_query_set(self):
|
|
return super(MyManager, self).get_query_set().order_by('-field1')
|
|
class ModelWithMyManager(ShowFieldsAndTypes, ModelA):
|
|
objects = MyManager()
|
|
field4 = models.CharField(max_length=10)
|
|
|
|
class MROBase1(PolymorphicModel):
|
|
objects = MyManager()
|
|
field1 = models.CharField(max_length=10) # needed as MyManager uses it
|
|
class MROBase2(MROBase1):
|
|
pass # Django vanilla inheritance does not inherit MyManager as _default_manager here
|
|
class MROBase3(models.Model):
|
|
objects = PolymorphicManager()
|
|
class MRODerived(MROBase2, MROBase3):
|
|
pass
|
|
|
|
class MgrInheritA(models.Model):
|
|
mgrA = models.Manager()
|
|
mgrA2 = models.Manager()
|
|
field1 = models.CharField(max_length=10)
|
|
class MgrInheritB(MgrInheritA):
|
|
mgrB = models.Manager()
|
|
field2 = models.CharField(max_length=10)
|
|
class MgrInheritC(ShowFieldsAndTypes, MgrInheritB):
|
|
pass
|
|
|
|
class Project(ShowFields,PolymorphicModel):
|
|
topic = models.CharField(max_length=30)
|
|
class ArtProject(Project):
|
|
artist = models.CharField(max_length=30)
|
|
class ResearchProject(Project):
|
|
supervisor = models.CharField(max_length=30)
|
|
|