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 で取得するにはどうすればよいでしょうか。

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 に答える