Django polymorphism in model

Viewed 752

i want to set diffirent sports to diffirent players like below. is there anyway to do this?

Example Model :

class Player(models.Model):
    id          = models.AutoField(primary_key=True)
    sportType   = models.CharField(max_length=15)
    sportObj    = generic.GenericForeignKey('content_type')

class Icehockey(models.Model):
    id           = models.AutoField(primary_key=True)
    stick_brand  = models.CharField(max_length=50)
    skate_number = models.IntegerField()

class Basketball(models.Model):
    id           = models.AutoField(primary_key=True)
    ball_brand   = models.CharField(max_length=50)
    uniform_color= models.CharField(max_length=10)

class Football(models.Model):
    id           = models.AutoField(primary_key=True)
    shoeNumber   = models.IntegerField()
    uniform_size = models.CharField(max_length=10)

Example Usage:

player1 = Player.objects.get(id=1).sportObj // returns <Icehockey object>
player2 = Player.objects.get(id=2).sportObj // returns <Basketball object>
player3 = Player.objects.get(id=3).sportObj // returns <Football object>
player4 = Player.objects.get(id=4).sportObj // returns <Football object>

edit : there is a document on Django Website about How content types works if anyone needs it.

1 Answers
Related