django 自關聯

表內自關聯:

自關聯是一種特殊的一對多的關係。

定義的模型類:

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 |
+--------+--------+---------------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章