表內自關聯:
自關聯是一種特殊的一對多的關係。
定義的模型類:
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 |
+--------+--------+---------------+