表内自关联:
自关联是一种特殊的一对多的关系。
定义的模型类:
class AreaInfo(models.Model):
atitle = models.CharField(max_length=20)
# 关系属性
aparent_id = models.ForeignKey('self', null=True, blank=True)
定义的视图函数:
def to_area(request):
area = AreaInfo.objects.get(atitle='广州市')
# 广州市的上级地区
parent = area.aparent_id
# 广州市的下级地区
children = area.areainfo_set.all()
return render(request, 'booktest/area.html', {'area': area, 'parent': parent, 'children': children})
效果图:
其实这里的查询 所在的地区
下级地区
通过如下的图来查询:
>>> AreaInfo.objects.get(atitle='广州市').atitle
'广州市'
一类->多类
>>> a.areainfo_set.all()
[<AreaInfo: AreaInfo object>, <AreaInfo: AreaInfo object>]
>>> a.areainfo_set.all()[0].atitle
'增城市'
>>> a.areainfo_set.all()[1].atitle
'从化市'
主要是这里的上级
,我的理解 自关联
就是把aparent_id
跟主键id
相关联起来,分开查询可以理解为如下:
当前要查询的数据的aparent_id
作为id
进行查询
mysql> select * from booktest_areainfo where aparent_id_id = '440000';
+--------+--------+---------------+
| id | atitle | aparent_id_id |
+--------+--------+---------------+
| 440100 | 广州市 | 440000 |
| 440200 | 韶关市 | 440000 |
| 440300 | 深圳市 | 440000 |
| 440400 | 珠海市 | 440000 |
| 440500 | 汕头市 | 440000 |
| 440600 | 佛山市 | 440000 |
| 440700 | 江门市 | 440000 |
| 440800 | 湛江市 | 440000 |
| 440900 | 茂名市 | 440000 |
| 441200 | 肇庆市 | 440000 |
| 441300 | 惠州市 | 440000 |
| 441400 | 梅州市 | 440000 |
| 441500 | 汕尾市 | 440000 |
| 441600 | 河源市 | 440000 |
| 441700 | 阳江市 | 440000 |
| 441800 | 清远市 | 440000 |
| 441900 | 东莞市 | 440000 |
| 442000 | 中山市 | 440000 |
| 445100 | 潮州市 | 440000 |
| 445200 | 揭阳市 | 440000 |
| 445300 | 云浮市 | 440000 |
+--------+--------+---------------+
21 rows in set (0.00 sec)
mysql> select * from booktest_areainfo where id = '440000';
+--------+--------+---------------+
| id | atitle | aparent_id_id |
+--------+--------+---------------+
| 440000 | 广东省 | NULL |
+--------+--------+---------------+