Django 外键为本身(Python3)

博客涉及Python和Django相关内容,Python是常用的后端开发语言,Django是基于Python的强大后端框架,在后端开发中应用广泛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

models.ForeignKey('self')
### DjangoForeignKey 在 models 中的用法 在 Django 的 ORM (对象关系映射) 中,`ForeignKey` 是用来表示一对多的关系。这意味着一个父类的对象可以有多个子类对象与其关联,而每个子类对象仅能有一个对应的父类对象。 #### 定义 ForeignKey 关系 当定义 `ForeignKey` 时,通常是在被关联的一方指定该字段来指向另一张表中的记录: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 在这个例子中,每本书 (`Book`) 都会有关联到一位作者 (`Author`)[^1]。 #### 设置删除行为 `on_delete` 参数指定了当所引用的对象被删除时应采取的动作。常见的选项包括: - `CASCADE`: 当父级对象被删除时自动删除所有依赖于它的子级对象; - `PROTECT`: 如果存在任何子级对象,则阻止父级对象的删除操作; - `SET_NULL`: 将设为空值(null),前提是允许此列可空; - `SET_DEFAULT`: 设定默认值作为新的目标,默认情况下不会改变现有数据; - `DO_NOTHING`: 不做处理,可能会违反数据库约束条件,在某些场景下不推荐使用。 #### 使用反向管理器访问相关对象 一旦建立了 `ForeignKey` 关系,就可以利用自动生成的相关管理器轻松获取或修改关联的数据集。对于上述案例而言,可以通过如下方式获得某位作家的所有书籍列表: ```python author_instance.book_set.all() ``` 这里 `book_set` 即为由 `Book` 表生成并连接至 `Author` 实例上的反向管理器名称;当然也可以通过设置 `related_name` 属性来自定义这个属性的名字。 #### 可选参数及相关配置 除了基本的功能之,还可以进一步定制化 `ForeignKey` 字段的行为,比如设定是否允许为空(`null=True/False`)、唯一性约束(`unique=True/False`)以及索引优化等特性。 ```python publisher = models.ForeignKey(Publisher, null=True, blank=True, unique=False, db_index=True, related_name='books', on_delete=models.SET_NULL) ``` 这段代码片段展示了更多可用的选择项及其含义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值