电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Django數據模型中on_delete使用詳解

瀏覽:147日期:2024-09-15 18:20:19

on_delete屬性針對外鍵ForeignKey

一、django3.0官方文檔介紹:

Many-to-one relationships多對一關系

To define a many-to-one relationship, use django.db.models.ForeignKey. You use it just like any other Field type: by including it as a class attribute of your model.

ForeignKey requires a positional argument: the class to which the model is related.

For example, if a Car model has a Manufacturer ? that is, a Manufacturer makes multiple cars but each Car only has one Manufacturer ? use the following definitions:

from django.db import modelsclass Manufacturer(models.Model): # ... passclass Car(models.Model): manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE) # ...

You can also create recursive relationships (an object with a many-to-one relationship to itself) and relationships to models not yet defined; see the model field reference for details.

It’s suggested, but not required, that the name of a ForeignKey field (manufacturer in the example above) be the name of the model, lowercase. You can, of course, call the field whatever you want.

常見的使用方式(設置為null)

class ApiList(models.Model): desc = models.CharField(max_length=255, verbose_name='接口描述') keyword = models.CharField(max_length=100, verbose_name='請求關鍵字') response = models.TextField(verbose_name='響應結果') api = models.ForeignKey(Api, blank=True, null=True, on_delete=models.SET_NULL, verbose_name='所屬接口') status = models.IntegerField(default=1, verbose_name='狀態') create_at = models.CharField(max_length=20, verbose_name='創建時間') update_at = models.CharField(max_length=20, verbose_name='更新時間')

一對多(ForeignKey)

class ForeignKey(ForeignObject): def __init__(self, to, on_delete, related_name=None, related_query_name=None, limit_choices_to=None, parent_link=False, to_field=None, db_constraint=True, **kwargs): super().__init__(to, on_delete, from_fields=[’self’], to_fields=[to_field], **kwargs)

一對一(OneToOneField)

class OneToOneField(ForeignKey): def __init__(self, to, on_delete, to_field=None, **kwargs): kwargs[’unique’] = True super().__init__(to, on_delete, to_field=to_field, **kwargs)

從上面外鍵(ForeignKey)和一對一(OneToOneField)的參數中可以看出,都有on_delete參數,而 django 升級到2.0之后,表與表之間關聯的時候,必須要寫on_delete參數,否則會報異常:

TypeError: __init__() missing 1 required positional argument: ’on_delete’

因此,整理一下on_delete參數的各個值的含義:

on_delete=None,# 刪除關聯表中的數據時,當前表與其關聯的field的行為on_delete=models.CASCADE, # 刪除關聯數據,與之關聯也刪除on_delete=models.DO_NOTHING, # 刪除關聯數據,什么也不做on_delete=models.PROTECT, # 刪除關聯數據,引發錯誤ProtectedError# models.ForeignKey(’關聯表’, on_delete=models.SET_NULL, blank=True, null=True)on_delete=models.SET_NULL, # 刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空,一對一同理)# models.ForeignKey(’關聯表’, on_delete=models.SET_DEFAULT, default=’默認值’)on_delete=models.SET_DEFAULT, # 刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值,一對一同理)on_delete=models.SET, # 刪除關聯數據, a. 與之關聯的值設置為指定值,設置:models.SET(值) b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象)

多對多(ManyToManyField)

class ManyToManyField(RelatedField): def __init__(self, to, related_name=None, related_query_name=None, limit_choices_to=None, symmetrical=None, through=None, through_fields=None, db_constraint=True, db_table=None, swappable=True, **kwargs): super().__init__(**kwargs)

因為多對多(ManyToManyField)沒有 on_delete 參數,所以略過不提.

二、on_delete外鍵刪除方式

CASCADE:級聯刪除。當Manufacturer對象刪除時,它對應的Car對象也會刪除。 PROTECT:保護模式,采用該選項,刪除時會拋出ProtectedError錯誤。 SET_NULL:置空模式,刪除的時候,外鍵字段被設置為空,前提就是blank=True, null=True,定義該字段的時候,允許為空。當Manufacturer對象刪除時,它對應的Car對象的manufacturer字段會置空,前提是null=True SET_DEFAULT:置默認值,刪除的時候,外鍵字段設置為默認值,所以定義外鍵的時候注意加上一個默認值。 SET():自定義一個值,該值當然只能是對應的實體了

django3.0關于models官方文檔地址:1.https://docs.djangoproject.com/en/3.0/topics/db/models/2.https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.ForeignKey

到此這篇關于Django數據模型中on_delete使用詳解的文章就介紹到這了,更多相關Django on_delete使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
主站蜘蛛池模板: 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 黑田精工电磁阀-CAMMOZI气缸-ROSS电磁-上海茂硕机械设备有限公司 | 海南在线 海南一家 | 有声小说,听书,听小说资源库-听世界网 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 南昌旅行社_南昌国际旅行社_南昌国旅在线 | 番茄畅听邀请码怎么输入 - Dianw8.com | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 雾度仪_雾度计_透光率雾度仪价格-三恩时(3nh)光电雾度仪厂家 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 工业插头-工业插头插座【厂家】-温州罗曼电气 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 深圳市源和塑胶电子有限公司-首页| 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 打造全球沸石生态圈 - 国投盛世 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 |