简介:许多朋友问有关如何填充Django的外部钥匙的问题。本文的首席CTO注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!
有什么相关条件?您不会说清楚,主要是要查看有限的条件。可以插入一个允许的字段以插入一个允许字段:如果您不工作,请添加触发器。LET首先触发触发器,首先将字段写入相关表,然后确定
数据库设计是整个设计中最基本的部分
1. Django应用程序设计:根据系统的分析,设计Django的应用程序。Django的开发是基于应用程序开发的,因此第一步是设计应用程序。
2.每个应用程序模型的设计:即设计的相应数据表
3.数据表的生成和修改
以在线教育系统为例:
USERPROFILE设计:在任何系统中,用户表是第一个设计的,Django将生成几个默认用户数据表
在设计自己的用户表时,我们希望生成自己的桌子,并希望继承Django的默认表。目前,我们可以继承Abstractuser(
来自django.contrib.auth.models import Abstractuser
)
班级用户(摘要使用者):
经过
定义用户填充表后,我们需要在sett.py文件中注册用户应用程序,installed_apps = [
“用户”,
这是给予的
并定义方法auth_user_model =“ user.userprofile”,请注意,这是使用users.userprofile而不是用户。model.model.userprofile
(1)用户模型的设计:
当我们设计Django应用程序时,每个应用程序都有模型,并且模型文件中的模型文件可能会在其他应用程序中使用该模型。这将很容易引入周期参考的问题。一种方法是使用分层模型方法,即,下一层可以引用下一层
模型,如下:
注意:PEP8的规格是在第一个区域引入Python自己的袋子的区域,然后另一行的第二个区域是第三方袋,例如Django,然后是Line Issome型号的第三个区域
(2)课程模型的写作:一个数据可能是与另一个数据的一对关系,但是一个表无法存储此关系,因此您需要将这两个数据存储在不同的数据表中,将引入外部键之间的关系。
Model的FileFiield,定义此字段以生成按钮以在背景系统中上传文件
(3)撰写组织模型:
(4)操作模型写作:
所有应用程序写入完成后,我们可以构建Python应用程序包,将所有应用程序放入此应用程序中,然后将所有应用程序放入应用程序。我们会发现对每个应用程序的模型的引用可能会出现一条红线,表明我们将向我们展示,表明我们可以向我们展示。找不到这些参考包,因此我们需要在设置中。文件
将应用程序添加到Python的搜索目录中,
导入sysys.path.insert(0,os.path.join(base_dir,'apps'))
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
笔记
边缘案件多次,因此您的呼叫可能会宣传几次。
首先分配数据后,然后将其保存为P。例如:
data = thressruntime()
数据。*** = ***#(分配到数据列表)
data.save()#save data(注意,仅在构建新数据时才注意,否则它将使用thressruntime.object.get()获得数据的值)
p = checkInlog(threntruntimeid = data)
P.Save
就是这样。
请勿分配p = checkInlog的值(thressRuntimeId = 1134)。
1.首先用需要添加的外键确定数据格式,涉及几个表
2.此数据格式的前端组件扩展到后端
3.后端验证数据,外键的值与获得对象的请求分开
4.使用添加添加外键的值
r1 = prole.objects.get(requ_name = real)#r1指示更多的userInfo数据对
u1 = userInfo(user_name = name,user_pwd =密码,sex = sex,sex,mobileno = mobile,email = email)
u1.save()
U1.Role.Add(R1)
u1.save()
Django将更多数据插入多个数据
首先,标题中使用的Django版本是什么?Django似乎从未见过外国模型。根据ORM的说法,外国人实际上是SQL中的外部钥匙。就个人而言,房东的问题是,一个领域可以与其他多个表相对应,如下所示:
类Whatreyoutrytoask:
FILED_XXX = model.Foreignkey((MODLA,modelb,)))
对于SQL来说,这是不科学的,它将无法与多个外部键相对应。如果要实现此效果,则只能拥有一个模型,modelb和File的中间表格,与此相对应。
班级中间(Models.Model):
model_a = model.foreignkey(modla)
model_b = model.foreignkey(modelb)
类Whatreyoutrytoask:
FILED_XXX = Models.Foreignkey(可中间)
简而言之,ModelA和ModelB之间存在关系。以上方法是指示一个可中间的表。实时您可以在django.modela或ModelB中使用Manytomany设置ManyTomany字段。请检查文档以获取特定的USANANY使用情况。
类Modela(Model.Model):
model_bs = manytomany(modelb)
类Whatreyoutrytoask:
FILED_XXX = models.Foreignkey(modla)
#或此,取决于特定实施的需求
#filed_xxx = models.foreignkey(modelb)
结论:以上是首席CTO注释汇编的Django外部密钥相关内容的相关内容。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?