简介:今天,首席主席团将与您分享Django如何意识到课堂的相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
django2.0模型外键,一个-to -One on_delete参数
在django2.0之后,定义外键和一个 - 到一个关系时,您需要添加on_delete选项。为了避免两个表中数据不一致的问题,将报告错误:
TypeError:__init __()缺少1所需的位置参数:'on_delete'
例如:
user = models.onetoonefield(用户)
所有者=型号。
需要更改为:
user = models.onetoonefield(用户,on_delete = models.cascade) - 旧版本(models.cascade)是默认值
所有者= models.foreignkey(userProfile,on_delete = models.cascade)-thisyeeels.cascade in Old版本是默认值
参数描述:
on_delete有五个可选值:cascade,protect,set_null,set_default,set()
级联:此值设置是关节删除。
保护:此值设置将报告完整性错误。
set_null:此值设置将把外部键设置为null,但前提是允许将其作为null。
set_default:此值设置将设置外部键的默认值。
set():此值设置,外部值称为一个函数。
在正常情况下,使用级联。
以下是官方文档描述:
外国基金会接受其他论点,这些论点定义了相对工作方式的默认值。
foreferkey.on_delete?
user = models.foreignkey(user,models.set_null,空白= true,null = true,)
自版本1.9:ON_DELETE的弃用将成为Django 2.0中所需的参数。在较旧的版本中,它默认了Tocascade。
在django.db.models中找到了on_delete的帖子值:
级联[来源]?
级联删除。Django模拟SQL约束在删除级联反应上的行为,并删除包含外键的对象。
保护[来源]?
通过提高django.db.db.integrityerror的子类的保护来防止删除引用对象。
set_null [源]?
设置外国钥匙空;如果null isstrue,这是公开的。
set_default [源]?
将外国人设置为我的默认值;必须设置外国键的默认值。
set()[源]?
set(get_sentinel_user)),),),),)
do_nothing [来源]?
不采取行动。如果您的数据库返回执行引用参考完整性,则除非您手动向数据库添加sqlondeconstraint,否则这将导致IntegragrityError
foreferkey.limit_choices_to?
可以使用对象。
对于Exmple:
Staff_member = models.Foreignkey(用户,on_delete = models.cascade,limit_choices_to = {'is_staff':true},),)
导致在themodelformto上提交的相应列表list hasthat hastis_staff = true。这可能对Django管理员有帮助。
例如,与pythondateModule连接以限制按日期prime的选择时,呼叫表单可能会有所帮助。
defLimit_pub_date_choices():return {'pub_date__lte':dateTime.date.utcnow()} limit_to = limit_date_choices_choices_choices
笔记
边缘案件多次,因此您的呼叫可能会宣传几次。
长时间连接通常用于手机服务。建议您先连接到龙卷风,然后连接到Django。
同时,我们必须修改数据库连接,然后将数据库更改为连接池
使用JQuery的Ajax方法从服务器加载JSON数据到客户端可以实现省级和市政级别关联的效果。
详细信息如下:
1)页面初始化时,首先加载所有省份;
2)选择省,AJAX传输编码到服务器,服务器返回所有城市以根据所选省的编码保存所有城市。
这可以动态地实现省级和市政级别的关联的影响。
在不需要删除的一个 - to -One和外键中,add_delete = models.do_nothing参数
去刘江的django教程,查看手柄,免费,并且该项目非常令人兴奋。
对于多条件查询,我们希望在选择菜单项后,根据我们选择的第一个菜单可以显示所有sub -menu项目。这是本文中提到的类菜单的问题。有许多实现类菜单的方法。基于作者进行的一个小实验,本文简要介绍了如何通过XML实现类菜单的功能。
首先,有必要定义XML文件以存储类菜单的信息。我们命名了query.xml。代码如下:
?XML版本=“ 1.0”编码=“ GB2312”?
信息
课程
文本软件工程/文本
值1/值
/课程
课程
文本数据结构/文本
value2/value
/课程
课程
文本操作系统/文本
value3/value
/课程
课程
文本计算机组成原理/文本
值4/值
/课程
老师
文字老师张/文字
值1/值
/老师
老师
文字老师li/文字
value2/value
/老师
老师
文字老师刘/文字
value3/value
/老师
老师
文字老师/文字
值4/值
/老师
班级
文字1/文字
值1/值
/班级
班级
文字2/文字
value2/value
/班级
班级
文字三类/文字
value3/value
/班级
班级
文字四类/文字
值4/值
/班级
/信息
然后创建一个名为query.html的html文件
在query.html中,首先创建一个表单
表格ID =“ queryform”
选择ID =“关键字”名称=“关键字” onChange =“ ShowDetail()”
选项值=“默认”默认/选项
选项值=“ 1”课程/选项
选项值=“ 2”老师/选项
选项值=“ 3”类/选项
/选择
选择ID =“ content” name =“ content” onChange =“ showvalue()”
选项值=“默认”默认/选项
/选择
/形式
从上面的代码可以看出,当我们选择第一个级别菜单时,将触发ShowDetail方法。这是由JavaScript实现的。因此,我们还需要定义ShowDetail方法。实际上,该代码如下:
功能showdetail(){
var document_xml = new ActiveXObject(“ Microsoft.xmldom”);
document_xml.load(“ query.xml”);//加载info.xml
var rootnode = document_xml.documentElement;//获取info.xml文档的根节点
var keyword = document.getElementByidx(“关键字”)。价值;
var细节;//用于存储辅助菜单内容,这是一个数组对象
var content = document.getElementByidx(“ content”);
content.options.length = 0;//首先清除
if(关键字==“默认”){
var option =新选项(“默认”,“默认”);
content.Add(option);
} 别的 {
if(关键字==“ 1”){{{
demails = document_xml.getElementsbytagname_r(“ course”);
} else if(关键字==“ 2”){
详细信息= document_xml.getElementsbytagname_r(“老师”);
} else if(关键字==“ 3”){
详细信息= document_xml.getElementsbytagname_r(“ class”);
}
for(var i = 0; idetails.length; i ++){
var Xtext =详细信息[i] .childnodes [0] .firtchild.nodevalue;//获取文字
var xvalue =详细信息[i] .childnodes [1] .firtchild.nodevalue;//将文本获取应有的价值
var option = new选项(Xtext,xvalue);
content.Add(option);
}
}
}
从上面的代码可以看出,ShowDetail方法根据不同的菜单选项显示了相应的子-Menu。这涉及通过JavaScript读取XML文件的操作。请参阅源代码的注释部分。请记住将内容与XML文件结合使用。
显示第二级菜单后,我们可以选择。选择后,我们将调用ShowValue方法显示选定的子-Menu项目。ShowValue的定义如下:
函数showvalue(){
var content = document.getElementByidx(“ content”);
var contentText = content.options [content.SelectIndIndex] .text;//获取文本值
var contentValue = document.getElementByIdx(“ content”)。价值;//获取文字
警报(contentValue+“”+contentText);
}
在这种方法中,请注意选择中文本值的获取。它与选择表单域域的值不同。有关详细信息,请参考代码及其注释。
包装头部/头部之间的两种方法。请记住写脚本语言=“ javascript”和/脚本,然后您可以打开query.xml以查看效果。
我不知道这对房东是否有用,希望它对房东有所帮助。
首要的关键
外部钥匙
指数
定义:
徽标的唯一迹象,无法重复或被允许为空
表的外键是另一个表的主要键。
该领域没有重复值,但可以具有空的值
影响:
用于确保数据完整性
用于与其他表建立联系
它是为了提高查询分类的速度
数字:
只有一个主钥匙
一张表可以具有多个外部键
一张桌子可以具有多个唯一索引
设置索引
要设置外部键,在参考表(PC表)和参考表(部分表)中,必须将相应的两个字段设置为索引。
过去表:
Alter表零件添加索引IDX_MODEL(模型);
该句子的含义是在零件表中添加索引,该索引基于模型字段,这导致此索引吸引名称IDX_MODEL。
PC表相似:
Alter Table PC添加索引IDX_CPUMODEL(CPUMODEL);
定义外键
以下是两个表之间描述的“约束”。由于PC的CPU模型必须参考零件表中的相应模型,因此我们将PC表的CPUMOL字段设置为“外键”,即,即,即此键的参考值来自其他表。
Alter Table PC添加约束FK_CPU_MODEL
外键(cpumol)
参考零件(模型);
水平关节操作
级别更新:更新主键时,外部键也会更新。
定义外键时,您可以在末尾添加此关键字:
在Update Cascade上;
也就是说,当更新主表时,子观察(我们)生成了链更新操作,并且似乎有些人喜欢称之为“类”操作。
如果您完全编写此语句,则是:
Alter Table PC添加约束FK_CPU_MODEL
外键(cpumol)
参考零件(模型)
在Update Cascade上;
类关节删除:删除主键时,将删除外键。
Alter Table PC添加约束FK_CPU_MODEL
外键(cpumol)
参考零件(模型)
在Delete Cascade上;
级别链接更新和删除:
在DELETE CASCADE上更新级联
结论:以上是首席CTO注释给所有人提出的Django的全部内容。我希望这对每个人都会有所帮助。如果您想了解有关此信息的更多信息,请记住收集并关注此网站。