0

わかりましたので、これは他の誰かが解決するのは本当に簡単かもしれませんが、私はこれを解決する方法について本当に混乱しています.

まず、特定のテーブルと多対多の関係を持つ複数のフィールドを持つモデル A があります。たとえば

class A(models.Model):
    field1 = models.ManyToMany('field1Collection')
    field2 = models.ManyToMany(field2Collection')

class field1Collection(models.Model):
    description = models.TextField()

class field2Collection(models.Model):
    description = models.TextFIeld()

とにかく、これは私が達成しようとしていることです。ランキング システムを保持できる別のモデルを作成する必要があります。たとえば、定義できるレコードを作成したい

x 個のランク (たとえば 3) があります。

  1. field1Collection オブジェクト 3
  2. field2Collection オブジェクト 6
  3. field1Collection オブジェクト 2

したがって、基本的には、field1Collection および field2Collection テーブルからオブジェクトを選択してランクを割り当てられるようにしたいと考えています。私はforeignkeysとm2mフィールドを使用してスキームを考えてみましたが、モデルはどのコレクションセットを参照する必要があるかを「事前に」知る必要があるため、すべてうまくいきません。この多くは意味がありますか?誰でも助けることができますか?

4

2 に答える 2

0

field1Collection と filed2Collection には、foreignKey で参照できる共通の祖先クラスが必要です。継承については、django のドキュメントを参照してください。

于 2013-01-20T00:04:50.123 に答える
0

GenericForeignKey関係を使用してこれを解決できます

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic

class RankItem(models.Model):
    rank = models.IntegerField()
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    def __unicode__(self):
        return self.rank

通常の ForeignKey は他の 1 つのモデルのみを「指す」ことができます。つまり、RankItem モデルが ForeignKey を使用した場合、タグを格納するモデルを 1 つだけ選択する必要があります。contenttypesアプリケーションは、これを回避し、任意のモデルとの関係を可能にする特別なフィールド タイプを提供します。

于 2013-01-20T08:05:03.973 に答える