django如何保存外键数据(2023年最新分享)

发布网友 发布时间:2024-10-23 22:31

我来回答

1个回答

热心网友 时间:2024-11-01 22:26

导读:很多朋友问到关于django如何保存外键数据的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

django如何设置外键

先给data赋值了之后,再去用p保存。例如:

data=Lessonruntime()

data.***=***#(给data的列赋值)

data.save()#保存data(注,只有在新建data数据时才要,否则用Lessonruntime.object.get()来获取data的值)

p=Checkinlog(lessonruntimeid=data)

p.save()

这样就可以了。

不可以用p=Checkinlog(lessonruntimeid=1134)的方式进行赋值。

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里,向有外键的DB里插入数据

这样的语句可以放在存储过程里

declare@idint

insertintotable1(name,password)values(...)

set@id=@@identity--取到刚插入的id

insertintotable2(age,sex,userid)values(...@id)

其实这样就可以了。如果你担心两个表的数据不同步,比如可能插入了table1后,但是出错了,表1有数据但表2没有,你可以把这2条语句放一个事务里。

pythondjango怎么把数据查询结果保存到一个list里面

1、新建一个JUPYTERNOTEBOOK文档。

2、定义一个LIST列表并且打印看看结果。list=[3,9,-7]print(list)。

3、为列表增加一个数字。list.append(10)print(list)。

4、字符串也是可以增加进去的。list.append("string123")print(list)。

5、列表里面更是可以含有其它列表。list.append([-3,-4])print(list)。

6、如果要删除最后一个列表的值,可以这样处理。list.pop()print(list)。

django插入外键值思路

1.先确定需要添加添加的带有外键的数据格式,涉及几个表

2.前端组装好这个数据格式传回后端

3.后端验证数据,从请求中分离出外键的值,进行获取对象

4.使用add进行添加外键的值

r1=Role.objects.get(role_name=role)#r1表示UserInfo的多对多数据

u1=UserInfo(user_name=name,user_pwd=password,sex=sex,mobileno=mobile,email=email)

u1.save()

u1.role.add(r1)

u1.save()

django插入多对多数据

Django-select下拉菜单的显示与保存

Django-select下拉菜单的显示与保存:

说明:这里不用多解释,就是普通定义emp表和dept表,注意emp的dept部门字段使用的ForeignKey多对一关系,去关联dept表的主键(dept没有重新定义主键,则是默认的主键id)

说明:这里的例子是保存时候的操作,既要展示不同部门的下拉菜单,又要能够保存成功。需要注意以下地方:

1.要重新定义get,实现当加载网页的时候能够展示已保存的部门信息,所以有个deptlist=dept.objects.all(),在html中要使用deptlist取部门表中的值。

2.当使用POST要保存的时候还是按照正常逻辑,先从html取对应的值,然后新建一个emp()对象,给对应字段赋值后保存。

3.保存部门的时候,对于外键,emp表是主动增加了一个叫做emp_id的字段,所以要使用emp.dept_id=dept,将获取到的dept(id)传给emp的dept_id字段。

说明:下拉单选菜单使用select,option,使用for循环从deptlist中取部门的值展示出来。所以是{%foriindeptlist.values%},注意显示的字段使用deptname,对应value使用id来用来存储在数据表中。

结语:以上就是首席CTO笔记为大家整理的关于django如何保存外键数据的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com