国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django數(shù)據(jù)模型中on_delete使用詳解

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

on_delete屬性針對(duì)外鍵ForeignKey

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

Many-to-one relationships多對(duì)一關(guān)系

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.

常見(jiàn)的使用方式(設(shè)置為null)

class ApiList(models.Model): desc = models.CharField(max_length=255, verbose_name='接口描述') keyword = models.CharField(max_length=100, verbose_name='請(qǐng)求關(guān)鍵字') response = models.TextField(verbose_name='響應(yīng)結(jié)果') api = models.ForeignKey(Api, blank=True, null=True, on_delete=models.SET_NULL, verbose_name='所屬接口') status = models.IntegerField(default=1, verbose_name='狀態(tài)') create_at = models.CharField(max_length=20, verbose_name='創(chuàng)建時(shí)間') update_at = models.CharField(max_length=20, verbose_name='更新時(shí)間')

一對(duì)多(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)

一對(duì)一(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)和一對(duì)一(OneToOneField)的參數(shù)中可以看出,都有on_delete參數(shù),而 django 升級(jí)到2.0之后,表與表之間關(guān)聯(lián)的時(shí)候,必須要寫(xiě)on_delete參數(shù),否則會(huì)報(bào)異常:

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

因此,整理一下on_delete參數(shù)的各個(gè)值的含義:

on_delete=None,# 刪除關(guān)聯(lián)表中的數(shù)據(jù)時(shí),當(dāng)前表與其關(guān)聯(lián)的field的行為on_delete=models.CASCADE, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)也刪除on_delete=models.DO_NOTHING, # 刪除關(guān)聯(lián)數(shù)據(jù),什么也不做on_delete=models.PROTECT, # 刪除關(guān)聯(lián)數(shù)據(jù),引發(fā)錯(cuò)誤ProtectedError# models.ForeignKey(’關(guān)聯(lián)表’, on_delete=models.SET_NULL, blank=True, null=True)on_delete=models.SET_NULL, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為null(前提FK字段需要設(shè)置為可空,一對(duì)一同理)# models.ForeignKey(’關(guān)聯(lián)表’, on_delete=models.SET_DEFAULT, default=’默認(rèn)值’)on_delete=models.SET_DEFAULT, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為默認(rèn)值(前提FK字段需要設(shè)置默認(rèn)值,一對(duì)一同理)on_delete=models.SET, # 刪除關(guān)聯(lián)數(shù)據(jù), a. 與之關(guān)聯(lián)的值設(shè)置為指定值,設(shè)置:models.SET(值) b. 與之關(guān)聯(lián)的值設(shè)置為可執(zhí)行對(duì)象的返回值,設(shè)置:models.SET(可執(zhí)行對(duì)象)

多對(duì)多(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)

因?yàn)槎鄬?duì)多(ManyToManyField)沒(méi)有 on_delete 參數(shù),所以略過(guò)不提.

二、on_delete外鍵刪除方式

CASCADE:級(jí)聯(lián)刪除。當(dāng)Manufacturer對(duì)象刪除時(shí),它對(duì)應(yīng)的Car對(duì)象也會(huì)刪除。 PROTECT:保護(hù)模式,采用該選項(xiàng),刪除時(shí)會(huì)拋出ProtectedError錯(cuò)誤。 SET_NULL:置空模式,刪除的時(shí)候,外鍵字段被設(shè)置為空,前提就是blank=True, null=True,定義該字段的時(shí)候,允許為空。當(dāng)Manufacturer對(duì)象刪除時(shí),它對(duì)應(yīng)的Car對(duì)象的manufacturer字段會(huì)置空,前提是null=True SET_DEFAULT:置默認(rèn)值,刪除的時(shí)候,外鍵字段設(shè)置為默認(rèn)值,所以定義外鍵的時(shí)候注意加上一個(gè)默認(rèn)值。 SET():自定義一個(gè)值,該值當(dāng)然只能是對(duì)應(yīng)的實(shí)體了

django3.0關(guān)于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

到此這篇關(guān)于Django數(shù)據(jù)模型中on_delete使用詳解的文章就介紹到這了,更多相關(guān)Django on_delete使用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 国产精品成人免费 | 99久在线| 欧美成人亚洲综合精品欧美激情 | 99久久精品费精品国产一区二区 | 亚洲日本视频 | 黄色三级网站在线观看 | 欧美午夜免费一级毛片 | 欧美激情免费观看一区 | 99欧美视频| 天堂va欧美ⅴa亚洲va一国产 | 91网在线| 狼人激情网 | 成人无遮挡毛片免费看 | 日韩在线视频免费不卡一区 | 男人天堂新地址 | 亚洲综合久久1区2区3区 | 亚洲视频在线网站 | 欧美成人精品一级高清片 | 欧美毛片a级毛片免费观 | 成人毛片免费观看视频在线 | 国产精品久久久久久久久久久不卡 | 日韩免费一区二区三区 | 欧美满嘴射 | 午夜欧美日韩在线视频播放 | 国产乱肥老妇精品视频 | 久久在线 | 另类二区三四 | 在线视频观看一区 | 国产成人精品一区二区免费 | 免费视频亚洲 | 日韩色视频一区二区三区亚洲 | 亚洲欧美精品一中文字幕 | 欧美理论大片清免费观看 | 国产日产韩产麻豆1区 | 国产毛片一区 | 色偷偷亚洲第一成人综合网址 | 999久久| 久久视奸| 97在线视频免费观看 | 欧美日韩视频在线第一区 | 国产一区二区在线视频 |