1

私が解決しようとしている問題のアイデアを提供するために、例を使用します。問題は、クラス間に複数の可能な関係が存在する可能性があることと、モデル ファイルでこれを表現する方法です。ショッピング Web サイトでは、Department は Sub-Department または Category リレーションシップを持つことができます。これは、理論的には、1 つの部門がカテゴリを持つまで 100 のサブ部門を持つことができることを意味します。

例: 部門/カテゴリ/アイテム、部門/部門/カテゴリ/カテゴリ/アイテム、部門/カテゴリ/カテゴリ/アイテム...など

私の質問は、Django models.py ファイルでこの関係をどのように説明するのが最善ですか? 外部キーを 2 つだけにして、1 つを空にしますか?

4

2 に答える 2

1

階層構造を表現できるように、Category モデルと Department モデルに親属性を作成します。

Department モデルで ForeignKey を使用して、他の Department を指すようにすることができます。また、Category モデルでGenericKeyを使用して、Department または他のカテゴリを指すようにすることができます。例えば:

class Department(models.Model):
    ...
    parent = models.ForeignKey('self', ...)

class Category(models.Model):
    ...
    parent_content_type = models.ForeignKey(ContentType)
    parent_id           = models.PositiveIntegerField()
    parent              = generic.GenericForeignKey('parent_content_type', 'parent_id')

これにより、部門の任意のツリーの下に、カテゴリの任意のツリーを表すことができます。

于 2011-04-14T16:44:10.613 に答える
0

django ツリーの実装 django-mpttまたはdjango-treebeardを使用できます

于 2011-04-14T17:16:04.807 に答える