Модельный класс Джанго, который может иметь либо те или иные отношения?
Чтобы дать вам представление о проблеме, которую я пытаюсь решить, я приведу пример. Проблема заключается в том, что между классами может быть несколько возможных отношений, и как это представить в файле моделей. На веб-сайте, посвященном покупкам, у Департамента может быть отношение Подотдел или Категория. Теоретически это может означать, что в одном департаменте может быть 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