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