0

我想在我当前的设置中添加一个新模型,看起来像这样

class Cinerama(models.Model):
    memeber = models.ManyToManyField(Person)
    #somethins

但问题是我没有人模型我有一个像这样的男孩和女孩模型

class Girls(models.Model):
    #somethins only girls do
    #many other fk
    teacher = models.ForeignKey(Teacher)

class Boys(models.Model):
    #somethins only boys do
    #many other fk
    teacher = models.ForeignKey(Teacher)

所以我不想改变设置,所以我想给女孩和男孩添加标签,然后制作一个新的人物模型,这样系统就会像这样

class Person(models.Model):
    slug = models.SlugField()

class Cinerama(models.Model):
    members = models.ManyToManyField(Person)
    #somethins

class Girls(models.Model):
    #somethins
    teacher = models.ForeignKey(Teacher)
    tag= models.ForeignKey(Person)

class Boys(models.Model):
    #somethins
    teacher = models.CharField()
    tag= models.ForeignKey(Person)

这将是采用或使用 generic.GenericForeignKey 的最佳选择吗?您将如何检索由 pk=1 的老师带到 Cinerama 的所有学生,

4

1 回答 1

0

这里需要一个通用的外键。他们是其他替代方案,例如创建一个人物模型并从中扩展您的男孩和女孩模型。可以将通用关系创建为:

class Cinerama(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    # other fields here

还要在你的女孩和男孩模型中添加一个反向关系,这样你就可以做到Girls.cinerama.all()

class Girls(models.Model):
    cinerama = generic.GenericRelation(Cinerama)
    # other fields here
于 2013-01-30T05:04:47.690 回答