3

最初に、多対 1 ではなく、1 対多の関係を作ろうとしていることを明確にしたいと思います。ForeignKeys がどのように機能するかは既に理解しています。

説明のために、モデルを単純化しました。実際の実装では、これよりもはるかにフィールドが豊富です。

と呼ばれるモデルがありColumnDefinitionます:

class ColumnDefinition(Model):
    column_name = CharField(max_length=32)
    column_type = PositiveSmallIntegerField()
    column_size = PositiveSmallIntegerField(null=True, blank=True)

レジストリがあると思います。各レジストリには、入力定義と出力定義用の個別の列セットがあります。私がやろうとしていることを示すために、そこに理論的な「OneToManyField」を入れました。

class Registry(Model):
    input_dictionary = OneToManyField(ColumnDefinition)
    output_dictionary = OneToManyField(ColumnDefinition)
    created_date = DateTimeField(auto_now_add=True, editable=False)

AColumnDefinitionはこれまでに 1 つのレジストリにのみ関連付けられています。したがって、多対多の関係ではありません。ForeignKey逆の関係を作成するために代わりにを配置するColumnDefinitionと、単一の逆しか作成できませんが、入力と出力の両方の逆が必要です。

ColumnDefinition回避できるのであれば 、「column_registry_type」フィールドを追加するような面倒なことはしたくありません。

この問題を解決する方法について誰か良いアイデアがありますか?

ありがとう!

4

2 に答える 2

0

で 2 つの異なるForeignKeyフィールドを定義できますし、定義する必要がありますColumnDefinitionrelated_name少なくとも 1 つの値 を指定するようにしてください。https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name

于 2013-09-04T21:31:16.680 に答える
0

入力用と出力用の2 つForeignKeysを onに追加して、それらを別々に与えることができます。ColumnDefinitionrelated_names

class ColumnDefinition(Model):
    ...
    input_registry = models.ForeignKey(Registry, related_name='input_columns')
    output_registry = models.ForeignKey(Registry, related_name='output_columns')

その後、 のような一連の列にアクセスできますregistry.input_columns

于 2013-09-04T21:31:35.727 に答える