django | 为 model 定义逻辑外键
问题#
想要在 orm
中定义外键,便于关联查询,但不想在数据库中生成实际的外键约束。
解决方式#
Django
的 ForeignKey
和数据库的 FOREIGN KEY
并不一样。Django
的 ForeignKey
是一种逻辑上的两个表的关联关系,可以指定是否使用数据库的 FOREIGN KEY
约束。
如:
from django.db import models
class Province(models.Model):
name = models.CharField(max_length=16)
def __unicode__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=16)
province = models.ForeignKey(Province, null=True, on_delete=models.DO_NOTHING, related_name='cities', db_constraint=False)
如果 ForeignKey
不添加 db_constraint=False
参数,会在数据库中使用外键约束。
另外,ForeignKey
的 on_delete
参数默认为 on_delete=models.CASCADE
,表示使用数据库的级联删除,使用 on_delete=models.SET_NULL
可以使删除 Province
时将关联的 City
表对应的 province_id
值设为 NULL
。
使用这种方式不会破坏 Django
的反向关联查询。
参考#
晚上吃饭想加个鸡腿 🍗
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步