如何指定任意嵌套的Django模型(如目录结构)?

时间:2019-04-30 22:06:05

标签: python django django-models

在我的Django Web应用程序中,我希望使用Django对象创建类似目录结构的内容。

换句话说,目标是构建一个Django模型(例如定义为Box的模型),该模型可以包含(或简单地与)任意数量的其他Box对象相关联带有任意数量的Thing对象。最好的方法是什么?

甚至更好:除了BoxThing,{{1 }}等?

1 个答案:

答案 0 :(得分:1)

您想要的是盒子的树形结构,可以通过自引用外键和另一个类(可能是抽象的类)来实现,例如,它代表盒子内的事物:

class Box(models.Model):
    name = models.CharField(max_length=200)
    parent_box = models.ForeignKey("Box", on_delete=PROTECT, null=True, related_name='children_boxes')

class Thing(models.Model):
    name = models.CharField(max_length=200)
    box = models.ForeignKey(Box, on_delete=PROTECT, related_name='%(app_label)s_%(class)s')

    class Meta:
         abstract=True

class Gadget(Thing):
    gadget_field = models.CharField(max_length=400)

class Item(Thing):
    item_field = models.CharField(max_length=600)