1

为了让您了解我要解决的问题,我将使用一个示例。问题是类之间可能存在多种可能的关系,以及如何在模型文件中表示这种关系。在购物网站中,部门可以有子部门或类别关系。这在理论上意味着一个部门可以有 100 个子部门,直到它有一个类别。

例如部门/类别/项目,部门/部门/类别/类别/项目,部门/类别/类别/项目...等

我的问题是如何最好地在 Django models.py 文件中描述这种关系?你会只有两个外键,一个是空的吗?

4

2 回答 2

1

我会在您的 Category 和 Department 模型上创建一个父属性,以便您可以表示层次结构。

您可以在 Department 模型上使用 ForeignKey 以允许它们指向其他 Departments,并且您可以在 Category 模型上使用GenericKey以使其指向 Departments 或其他类别。例如:

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-mpttdjango-treebeard

于 2011-04-14T17:16:04.807 回答