为了让您了解我要解决的问题,我将使用一个示例。问题是类之间可能存在多种可能的关系,以及如何在模型文件中表示这种关系。在购物网站中,部门可以有子部门或类别关系。这在理论上意味着一个部门可以有 100 个子部门,直到它有一个类别。
例如部门/类别/项目,部门/部门/类别/类别/项目,部门/类别/类别/项目...等
我的问题是如何最好地在 Django models.py 文件中描述这种关系?你会只有两个外键,一个是空的吗?
为了让您了解我要解决的问题,我将使用一个示例。问题是类之间可能存在多种可能的关系,以及如何在模型文件中表示这种关系。在购物网站中,部门可以有子部门或类别关系。这在理论上意味着一个部门可以有 100 个子部门,直到它有一个类别。
例如部门/类别/项目,部门/部门/类别/类别/项目,部门/类别/类别/项目...等
我的问题是如何最好地在 Django models.py 文件中描述这种关系?你会只有两个外键,一个是空的吗?
我会在您的 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')
这将允许您在任意部门树下表示任意类别树。
您可以使用 django 树实现 django-mptt或django-treebeard