模型中的Django多态性

模型中的Django多态性,django,database-design,django-models,polymorphism,relational-database,Django,Database Design,Django Models,Polymorphism,Relational Database,我想为不同的运动员设置不同的运动项目 如下图所示。有什么办法可以这样做吗 示例模型: class Player(models.Model): id = models.AutoField(primary_key=True) sportType = models.CharField(max_length=15) sportObj = generic.GenericForeignKey('content_type') class Icehockey

我想为不同的运动员设置不同的运动项目 如下图所示。有什么办法可以这样做吗

示例模型:

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)
用法示例:

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>
player1=Player.objects.get(id=1).sportObj//返回
player2=Player.objects.get(id=2).sportObj//返回
player3=Player.objects.get(id=3).sportObj//返回
player4=Player.objects.get(id=4).sportObj//返回
编辑:
Django网站上有一个关于是否有人需要它的文档。

您提供的示例看起来不错,我对模型进行了一些修改,使其可用

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Player(models.Model):
    SPORT_CHOICES = (
        ('I', 'Icehockey'),
        ('B', 'Basketball'),
        ('F', 'Football'),
        )
    sportType = models.CharField(max_length=15,choices=SPORT_CHOICES)
    sportObj = GenericForeignKey('content_type', 'object_id')
    object_id = models.PositiveIntegerField()
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)

class Icehockey(models.Model):
    stick_brand  = models.CharField(max_length=50)
    skate_number = models.IntegerField()

class Basketball(models.Model):
    ball_brand   = models.CharField(max_length=50)
    uniform_color= models.CharField(max_length=10)

class Football(models.Model):
    shoeNumber   = models.IntegerField()
    uniform_size = models.CharField(max_length=10)