Создать крошку, когда у меня есть собственная таблица ForeignKey, подключенная к таблице M2M - PullRequest
0 голосов
/ 18 мая 2018

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

У меня есть модель / таблица Category, в которой есть ForeignKey:

|      id     |     name    |  parent_id
|       1     |     name1   |    Null
|       2     |     name2   |    Null
|       3     |     name3   |    1
|       4     |     name4   |    1
|       5     |     name5   |    3
|       6     |     name6   |    3
|       7     |     name7   |    5

Родительская категория может иметь несколько подкатегорий без ограничения по глубине;

Также у меня есть модель / таблица Продукт, которая имеет отношение ManytoMany к категории.Продукт может иметь несколько категорий, а категория может иметь несколько продуктов

Промежуточная таблица

|      id     |     product_id    |  category_id  
|       1     |       1           |    1     
|       2     |       1           |    2     
|       3     |       2           |    1        
|       4     |       2           |    3    
|       5     |       3           |    5     
|       6     |       3           |    4    
|       7     |       3           |    7   

Таблица товаров

|      id     |     name    
|       1     |     name1   
|       2     |     name2   
|       3     |     name3   

Что мне нужно:

1) для хлебной крошки получить первый набор категорий, соответствующих продукту

Название продукта 3: идентификатор категории 1 -> идентификатор категории 3 -> идентификатор категории 7

2) запускиз категории получить все продукты в этой категории и ее подкатегориях

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

1 Ответ

0 голосов
/ 18 мая 2018

Вместо этого вы можете использовать вложенные множества (AKA mptt) или таблицу замыканий.Вы можете прочитать это https://www.slideshare.net/billkarwin/models-for-hierarchical-data, чтобы узнать больше о различных способах моделирования иерархической структуры данных в SQL.

Вложенные множества (mptt), возможно, являются наиболее сложным шаблоном, но есть приложение django третьей части, котороереализует это: https://github.com/django-mptt/django-mptt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...