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 |
+--------+--------+---------------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值