问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

django如何实现级联(2023年最新整理)

发布网友 发布时间:2024-09-29 05:45

我来回答

1个回答

热心网友 时间:2024-12-14 01:08

导读:今天首席CTO笔记来给各位分享关于django如何实现级联的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

django2.0外键处理

Django2.0里model外键和一对一的on_delete参数

在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:

TypeError:__init__()missing1requiredpositionalargument:'on_delete'

举例说明:

user=models.OneToOneField(User)

owner=models.ForeignKey(UserProfile)

需要改成:

user=models.OneToOneField(User,on_delete=models.CASCADE)?????--在老版本这个参数(models.CASCADE)是默认值

owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE)???--在老版本这个参数(models.CASCADE)是默认值

参数说明:

on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值

CASCADE:此值设置,是级联删除。

PROTECT:此值设置,是会报完整性错误。

SET_NULL:此值设置,会把外键设置为null,前提是允许为null。

SET_DEFAULT:此值设置,会把设置为外键的默认值。

SET():此值设置,会调用外面的值,可以是一个函数。

一般情况下使用CASCADE就可以了。

下面是官方文档说明:

ForeignKeyacceptsotherargumentsthatdefinethedetailsofhowtherelationworks.

ForeignKey.on_delete?

WhenanobjectreferencedbyaForeignKeyisdeleted,DjangowillemulatethebehavioroftheSQLconstraintspecifiedbytheon_deleteargument.Forexample,ifyouhaveanullableForeignKeyandyouwantittobesetnullwhenthereferencedobjectisdeleted:

user=models.ForeignKey(User,models.SET_NULL,blank=True,null=True,)

Deprecatedsinceversion1.9:on_deletewillbecomearequiredargumentinDjango2.0.InolderversionsitdefaultstoCASCADE.

Thepossiblevaluesforon_deletearefoundindjango.db.models:

CASCADE[source]?

Cascadedeletes.DjangoemulatesthebehavioroftheSQLconstraintONDELETECASCADEandalsodeletestheobjectcontainingtheForeignKey.

PROTECT[source]?

PreventdeletionofthereferencedobjectbyraisingProtectedError,asubclassofdjango.db.IntegrityError.

SET_NULL[source]?

SettheForeignKeynull;thisisonlypossibleifnullisTrue.

SET_DEFAULT[source]?

SettheForeignKeytoitsdefaultvalue;adefaultfortheForeignKeymustbeset.

SET()[source]?

SettheForeignKeytothevaluepassedtoSET(),orifacallableispassedin,theresultofcallingit.Inmostcases,passingacallablewillbenecessarytoavoidexecutingqueriesatthetimeyourmodels.pyisimported:

fromdjango.confimportsettingsfromdjango.contrib.authimportget_user_modelfromdjango.dbimportmodelsdefget_sentinel_user():returnget_user_model().objects.get_or_create(username='deleted')[0]classMyModel(models.Model):user=models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.SET(get_sentinel_user),)

DO_NOTHING[source]?

Takenoaction.Ifyourdatabasebackendenforcesreferentialintegrity,thiswillcauseanIntegrityErrorunlessyoumanuallyaddanSQLONDELETEconstrainttothedatabasefield.

ForeignKey.limit_choices_to?

SetsalimittotheavailablechoicesforthisfieldwhenthisfieldisrenderesingaModelFormortheadmin(bydefault,allobjectsinthequerysetareavailabletochoose).Eitheradictionary,aQobject,oracallablereturningadictionaryorQobjectcanbeused.

Forexample:

staff_member=models.ForeignKey(User,on_delete=models.CASCADE,limit_choices_to={'is_staff':True},)

causesthecorrespondingfieldontheModelFormtolistonlyUsersthathaveis_staff=True.ThismaybehelpfulintheDjangoadmin.

Thecallableformcanbehelpful,forinstance,whenusedinconjunctionwiththePythondatetimemoletolimitselectionsbydaterange.Forexample:

deflimit_pub_date_choices():return{'pub_date__lte':datetime.date.utcnow()}limit_choices_to=limit_pub_date_choices

Iflimit_choices_toisorreturnsaQobject,whichisusefulforcomplexqueries,thenitwillonlyhaveaneffectonthechoicesavailableintheadminwhenthefieldisnotlistedinraw_id_fieldsintheModelAdminforthemodel.

Note

Ifacallableisusedforlimit_choices_to,itwillbeinvokedeverytimeanewformisinstantiated.Itmayalsobeinvokedwhenamodelisvalidated,forexamplebymanagementcommandsortheadmin.Theadminconstructsquerysetstovalidateitsforminputsinvariousedgecasesmultipletimes,sothereisapossibilityyourcallablemaybeinvokedseveraltimes.

用django怎么实现http长连接

长连接通常是给手机服务时用的。建议你先连接到tornado,再连接django。

同时还要修改数据库连接,将数据库连接改成连接池

请问用什么方式可以实现省市级联的效果呀省市的数据是从数据库中查出来的

使用jquery的ajax方式从服务器加载json数据至客户端即可以实现省市级联的效果。

具体如下:

1)、页面初始化时,首先加载所有的省;

2)、选择省,ajax传送编码至服务器,服务器根据选中的省编码,返回省下所有的市。

这样就能动态实现了省市级联的效果了。

Django不级联删除问题,怎么解决

在不需要删除的一对一和外键中,添加on_delete=models.DO_NOTHING参数

去刘江的DJango教程看看把,免费的,而且项目实战很精彩。

怎么实现级联菜单?

对于一个多条件的查询,我们希望在选择了一个菜单项后,另外一个下拉菜单能够根据我们所选择的第一个菜单项显示其所有子菜单项。这就是本文提到的级联菜单问题。级联菜单实现的方法有很多,本文根据笔者所做的一个小实验,简单的介绍一下如何通过XML来实现级联菜单的功能。

首先要定义一个XML文件,用以存放级联菜单的信息,我们命名为query.xml,其代码如下:

?xmlversion="1.0"encoding="gb2312"?

info

course

text软件工程/text

value1/value

/course

course

text数据结构/text

value2/value

/course

course

text操作系统/text

value3/value

/course

course

text计算机组成原理/text

value4/value

/course

teacher

text张老师/text

value1/value

/teacher

teacher

text*/text

value2/value

/teacher

teacher

text刘老师/text

value3/value

/teacher

teacher

text王老师/text

value4/value

/teacher

class

text一班/text

value1/value

/class

class

text二班/text

value2/value

/class

class

text三班/text

value3/value

/class

class

text四班/text

value4/value

/class

/info

然后再创建一个HTML文件,命名为query.html

在query.html里,首先创建一个表单

formid="queryForm"

selectid="keyword"name="keyword"onChange="showDetail()"

optionvalue="default"default/option

optionvalue="1"课程/option

optionvalue="2"教师/option

optionvalue="3"班级/option

/select

selectid="content"name="content"onChange="showValue()"

optionvalue="default"default/option

/select

/form

从上面的代码可以看出,当我们选择第一级菜单时,会触发showDetail方法,这是通过JavaScript来实现的,因此我们还需要定义一个showDetail方法,其实现代码如下:

functionshowDetail(){

vardocument_xml=newActiveXObject("Microsoft.XMLDOM");

document_xml.load("query.xml");//加载info.xml

varRootNode=document_xml.documentElement;//获得info.xml文档的根节点

varkeyword=document.getElementByIdx("keyword").value;

vardetails;//用以存放二级菜单内容,是一个数组对象

varcontent=document.getElementByIdx("content");

content.options.length=0;//先清空

if(keyword=="default"){

varoption=newOption("default","default");

content.add(option);

}else{

if(keyword=="1"){

details=document_xml.getElementsByTagName_r("course");

}elseif(keyword=="2"){

details=document_xml.getElementsByTagName_r("teacher");

}elseif(keyword=="3"){

details=document_xml.getElementsByTagName_r("class");

}

for(vari=0;idetails.length;i++){

varxText=details[i].childNodes[0].firstChild.nodeValue;//获取文本

varxValue=details[i].childNodes[1].firstChild.nodeValue;//获取文本以应的值

varoption=newOption(xText,xValue);

content.add(option);

}

}

}

从上面的代码可以看出,showDetail方法会根据一级菜单选项的不同显示对应的子菜单。这里涉及到通过JavaScript来读取xml文件的操作,可以参见源码的注释部分,记得结合xml文件里的内容一起看哦。

二级菜单显示出来之后,我们就可以进行选择了,选择之后,会调用showValue方法,把选到的子菜单项的value和text显示出来。showValue的定义如下:

functionshowValue(){

varcontent=document.getElementByIdx("content");

varcontentText=content.options[content.selectedIndex].text;//获取text值

varcontentValue=document.getElementByIdx("content").value;//获取文本

alert(contentValue+""+contentText);

}

在这个方法里,要注意option当中text值的获取,它与select表单域的value的获取方式不大一样,详见代码及其注释。

把两个方法封装在head/head之间,记得要写上scriptlanguage="javascript"和/script了,然后你直接打开query.xml就可以看到效果了。

不知是否对楼主有用,希望对楼主有所帮助。

如何设置主键和外键,实现级联更新,级联删除

主键

外键

索引

定义:

唯一标识一条记录,不能有重复的,不允许为空

表的外键是另一表的主键,外键可以有重复的,可以是空值

该字段没有重复值,但可以有一个空值

作用:

用来保证数据完整性

用来和其他表建立联系用的

是提高查询排序的速度

个数:

主键只能有一个

一个表可以有多个外键

一个表可以有多个惟一索引

设置索引

若要设置外键,在参照表(pc表)和被参照表(parts表)中,相对应的两个字段必须都设置索引(index)。

对parts表:

ALTERTABLEpartsADDINDEXidx_model(model);

这句话的意思是,为parts表增加一个索引,索引建立在model字段上,给这个索引起个名字叫idx_model。

对pc表也类似:

ALTERTABLEpcADDINDEXidx_cpumodel(cpumodel);

定义外键

下面为两张表之间建立前面所述的那种“约束”。因为pc的CPU型号必须参照parts表中的相应型号,所以我们将pc表的cpumodel字段设置为“外键”(FOREIGNKEY),即这个键的参照值来自于其他表。

ALTERTABLEpcADDCONSTRAINTfk_cpu_model

FOREIGNKEY(cpumodel)

REFERENCESparts(model);

级联操作

级联更新:更新主键时,外键也随之更新。

可以在定义外键的时候,在最后加入这样的关键字:

ONUPDATECASCADE;

即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。

如果把这语句完整的写出来,就是:

ALTERTABLEpcADDCONSTRAINTfk_cpu_model

FOREIGNKEY(cpumodel)

REFERENCESparts(model)

ONUPDATECASCADE;

级联删除:删除主键时,外键也随之删除。

ALTERTABLEpcADDCONSTRAINTfk_cpu_model

FOREIGNKEY(cpumodel)

REFERENCESparts(model)

ONDELETECASCADE;

级联更新、删除:

onupdatecascadeondeletecascade

结语:以上就是首席CTO笔记为大家介绍的关于django如何实现级联的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
发摅解释 摅的组词有哪些 摅字能组哪些词 检测电脑配置的软件电脑硬件检测权威软件有哪几个 查看电脑参数的软件什么软件可以全面检测显示出电脑硬件参数数据_百度... 有没有可以查自己电脑配置的软件啊??? 芯片程序解密哪家好 ...文章怎么突然间阅读量开始大减,从几百掉到个位数。 百家号怎么才个位数播放量?个位数播放量怎么算? 保本收益投资合法吗 小米2S有清理系统垃圾的功能吗,在什么地方,找不到啊,只有一个一键清理啊... 有什么安卓软件,具有一键清理,桌面小部件,具有清理系统文件缓存进程功 ... 美国国旗13条横杠50颗星星代表什么? 美国国旗星条旗上有多少颗星星组成 自己的生日怎么祝福 自己的生日怎么祝福自己 最实在的生日祝福 现在美国国旗星条旗上有多少颗星:A.25颗B.30颗C.50颗D.60颗 求赛车传奇演员表,赛车传奇女主角赛车传奇男主角是谁? 后背发黑是什么引起的 后背晒出黑斑该用哪些护肤品改善? 电脑上文件(电子稿的作文)传到了手机微信上,能不能拿着手机去打印呀_百... ...上面突然显示不出有刷新按钮和向前向后等按钮呢?应该怎样设置才能将... 烧椒该怎么去皮? 用英语写出数字,十到二十。 潍坊地区的社保等关系如何转移到济南? 家在潍坊市奎文区坐火车到济南需要什么体检要求吗? 潍坊私家车能进济南市里吗? 现在潍坊去济南需要证明吗 2022年4.5潍坊的可以去济南嘛 潍坊到济南转车需要核算证明吗? django如何给外键赋值(2023年最新整理) 福建莆田海峡职业中专学校海峡职校师资队伍 福建莆田海峡职业中专学校学校荣誉 卓达•东方巴哈马项目介绍 王者荣耀诸葛亮怎么连招_诸葛亮无限连招技能攻略 王者荣耀诸葛亮连招技巧口诀-诸葛亮使用技巧 制作鱼香豆腐时需要注意哪些细节才能做好这道菜品? 探探单方面解除后还能恢复吗 探探单方面解除对方还有我吗 正宗的鱼香豆腐的做法窍门 诸葛亮的大招怎么发 如何烹饪出风味独特的鱼香豆腐? 火炬之光 宝石合成 如何科学制定上身健身计划,打造强壮有型的上半身 鱼香豆腐不入味的原因有哪些? 怎样制作鱼香豆腐干可以使它的口感更好? 植物组织植物组织的形成与特性 谁能告诉我这是美利达什么型号的车子?大概多少钱? 中国特色社会主义事业总体布局是四个全面 目前最好的国产手机是哪个牌子 法国外籍兵团第13团编制