我想在我当前的设置中添加一个新模型,如下所示
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的所有学生,
答案 0 :(得分: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