Как можно указать произвольно вложенную модель Django (например, структуру каталогов)? - PullRequest
0 голосов
/ 01 мая 2019

В моем веб-приложении Django я хочу создать нечто вроде структуры каталогов, используя объекты Django.

Другими словами, цель состоит в том, чтобы построить модель Django (скажем, модель, определенную как Box), которая может содержать (или просто быть связана с) произвольное число других Box объектов наряду с произвольным числом Thing объектов. Каков наилучший способ сделать это?

Еще лучше: возможно ли спроектировать модель Box так, чтобы она содержала (или просто была связана с) еще больше объектов, в дополнение к Thing, т. Е. Gadget, Item и т. Д .?

1 Ответ

1 голос
/ 01 мая 2019

То, что вам нужно, это древовидная структура для блоков, полученная с помощью внешнего ссылочного внешнего ключа и другого класса, возможно абстрактного, который представляет Вещи внутри блока, например:

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