Django模型类可以有一个或另一个关系?

时间:2011-04-14 16:31:52

标签: django django-models relationships object-relationships

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

e.g。部门/类别/项目,部门/部门/类别/类别/项目,部门/类别/类别/项目......等等

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

2 个答案:

答案 0 :(得分:1)

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

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

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')

这将允许您在任意部门树下表示任意类别树。

答案 1 :(得分:0)

您可以使用django树实现django-mpttdjango-treebeard