发布网友 发布时间:2024-09-26 03:27
共1个回答
热心网友 时间:2024-10-19 09:25
导读:今天首席CTO笔记来给各位分享关于django外键如何赋值的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
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插入多对多数据
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.
js中如何对django模板中的变量进行赋值django模版变量是属于后台服务器端的,而Js是前台的,没法给它们赋值。你应该在服务器段就赋值,然后传给前端页面,render_to_response这个函数是可以添加模版变量的,到时候直接在页面上使用就可以了,具体你可以查查render_to_response这个函数的用法
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)的方式进行赋值。
Django表关联对象及多表查询首先建立Student,Dpartment,Course,Stu_info表
一对多表关系数据的添加:
1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问:
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
那么如果我们也希望在在访问某个学院的实现对象的学生的时候改怎么访问呢???
表关联对象的访问:
可以在定义时设置related_name参数来覆盖foo_set的名称.
clear()从关联的对象集中删除所有的对象
多表查询----跨关联关系的查询:
Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。
结语:以上就是首席CTO笔记为大家整理的关于django外键如何赋值的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django外键如何赋值的相关内容别忘了在本站进行查找喔。