我想解决的问题是在Django中,但与我在数据库中查询的方式密切相关。
我有一个对自己有一个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
父类别可以有多个子类别,没有深度限制;
此外,我还有一个与Category有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:类别Id 1 - > Cat id 3 - > Cat id 7
2)从类别开始获取该类别及其子类别中的所有产品
我想在几个查询中得到它们,避免从子类到父类的递归调用数据库
答案 0 :(得分:0)
您可能希望使用嵌套集(AKA mptt)或闭包表。您可以阅读此https://www.slideshare.net/billkarwin/models-for-hierarchical-data以获取有关在SQL中建模分层数据结构的各种方法的更多信息。
嵌套集(mptt)可能是最复杂的模式,但有第三部分django应用程序实现它:https://github.com/django-mptt/django-mptt。