Модельный класс Джанго, который может иметь либо те или иные отношения?

Чтобы дать вам представление о проблеме, которую я пытаюсь решить, я приведу пример. Проблема заключается в том, что между классами может быть несколько возможных отношений, и как это представить в файле моделей. На веб-сайте, посвященном покупкам, у Департамента может быть отношение Подотдел или Категория. Теоретически это может означать, что в одном департаменте может быть 100 подотделов, пока у него нет категории.

например, отдел / категория / позиция, отдел / отдел / категория / категория / позиция, отдел / категория / категория / позиция... и т. д.

Мой вопрос, как лучше всего описать это отношение в файле Django models.py? Будете ли вы иметь два внешних ключа и один будет пустым?

2 ответа

Я бы создал родительский атрибут в ваших моделях категорий и отделов, чтобы вы могли представлять иерархическую структуру.

Вы можете использовать ForeignKey в модели Department, чтобы они могли указывать на другие Департаменты, и вы можете использовать GenericKey в модели Category, чтобы позволить ему указывать на Департаменты или другие Категории. Например:

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

Другие вопросы по тегам