本文目录导航:
django如何给外键赋值(2023年最新整顿)
django如何设置外键先给data赋值了之后,再去用p保留。例如:
>django models.SlugField 怎样经常使用
class SlugField([max_length=50, **options])
Slug 是一个资讯术语,理论是某些物品的短标签。
一个slug只能蕴含字母、数字、下划线或许是连字符,理论用来作为短标签。
理论它们是用来放在URL里的。
像CharField一样,你可以指定max_length(也请参阅该局部中的无关数据库可移植性的说明和max_length)。
假设没有指定 max_length, Django将会自动长度为50。
SlugField字段的_index智能设置为True。
理论依据另一个值智能生成slug来填充到SlugField的值。
你可以在admin中经常使用prepopulated_fields智能口头此操作。
哪个版本的Django中objects(2023年最新分享)
python的django内(gname=www)如何写蕴含www的呢?经常使用__contains
(gname__contains=www)
网页链接
留意get必定取得且正好取得一条记载。
假设Grades中有多条gname字段蕴含www的记载将抛出MultipleObjectsReturned意外,而假设没有记载合乎条件将抛出DoesNotExist意外。
django2.1可以装置哪个版本drf
3.10.0版。
假设django装置的是2.0版本,倡导装置以下版本,pipinstalldjangorestframework==3.10.0。
django2.0外键处置Django2.0里model外键和一对一的on_delete参数
在django2.0后,定义外键和一对一相关的时刻须要加on_delete选项,此参数为了防止两个表里的数据不分歧疑问,不然会报错:
TypeError:__init__()missing1requiredpositionalargument:on_delete
举例说明:
user=(User)
owner=(UserProfile)
须要改成:
user=(User,on_delete=)?????--在老版本这个参数()是自动值
owner=(UserProfile,on_delete=)???--在老版本这个参数()是自动值
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选用的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性失误。
SET_NULL:此值设置,会把外键设置为null,前提是准许为null。
SET_DEFAULT:此值设置,会把设置为外键的自动值。
SET():此值设置,会调用外面的值,可以是一个函数。
普通状况下经常使用CASCADE就可以了。
上方是官网文档说明:
ForeignKeyacceptsotherargumentsthatdefinethedetailsofhowtherelationworks.
WhenanobjectreferencedbyaForeignKeyisdeleted,DjangowillemulatethebehavioroftheSQLconstraintspecifiedbytheon_,ifyouhaveanullableForeignKeyandyouwantittobesetnullwhenthereferencedobjectisdeleted:
user=(User,_NULL,blank=True,null=True,)
Deprecatedsinceversion1.9:on_.
Thepossiblevaluesforon_:
CASCADE[source]?
PROTECT[source]?
PreventdeletionofthereferencedobjectbyraisingProtectedError,.
SET_NULL[source]?
SettheForeignKeynull;thisisonlypossibleifnullisTrue.
SET_DEFAULT[source]?
SettheForeignKeytoitsdefaultvalue;adefaultfortheForeignKeymustbeset.
SET()[source]?
SettheForeignKeytothevaluepassedtoSET(),orifacallableispassedin,,:
_user__sentinel_user():returnget_user_model()_or_create(username=deleted)[0]classMyModel():user=(_USER_MODEL,on_delete=(get_sentinel_user),)
DO_NOTHING[source]?
,thiswillcauseanIntegrityErrorunlessyoumanuallyaddanSQLONDELETEconstrainttothedatabasefield.
_choices_to?
SetsalimittotheavailablechoicesforthisfieldwhenthisfieldisrenderedusingaModelFormortheadmin(bydefault,allobjectsinthequerysetareavailabletochoose),aQobject,oracallablereturningadictionaryorQobjectcanbeused.
Forexample:
staff_member=(User,on_delete=,limit_choices_to={is_staff:True},)
causesthecorrespondingfieldontheModelFormtolistonlyUsersthathaveis_staff=.
Thecallableformcanbehelpful,forinstance,:
deflimit_pub_date_choices():return{pub_date__()}limit_choices_to=limit_pub_date_choices
Iflimit_choices_toisorreturnsaQobject,whichisusefulforcomplexqueries,thenitwillonlyhaveaneffectonthechoicesavailableintheadminwhenthefieldisnotlistedinraw_id_fieldsintheModelAdminforthemodel.
Ifacallableisusedforlimit_choices_to,,,sothereisapossibilityyourcallablemaybeinvokedseveraltimes.
求教Python里的queryset是什么,以及Objects类的用法?这是哪儿的django面试标题或许口试标题吧,请检查django开发手册。
是查问集,就是传到主机上的url外面的查问内容。
Django会对查问前往的结果集QuerySet启动缓存,这是为了提高查问效率。
也就是说,在你创立一个QuerySet对象的时刻,Django并不会立刻向数据库收回查问命令,只要在你须要用到这个QuerySet的时刻才会这样做。
是django成功的mvc中的m,Django中的模型类都有一个objects对象,它是一个Django中定义的QuerySet类型的对象,它蕴含了模型对象的实例。
3.不能,由于get或许会无心外,可以用filter函数,如下
(blog__id__exact=1)#显示的经常使用__exact
(blog__id=1)#隐含的经常使用__(blog__pk=1)#__pk相当于__id__exact
Django,和的区别踩坑记载
前提,已有模型,假设ID存在则update其余字段,假设不存在则做add操作,不时启动add操作无法走到update,造成数据重复参与
的()方法
经过get失掉,前往的是一个记载对象,假设结果不存在或许是有多条结果,无法进入if语句下,间接跳到except
get()内参数准许多个,and的相关,需同时满足
的()方法:
obi=(id=id)[0]
经过filter前往的是一个对象列表,假设结果不存在会前往[]
总结:get方法只能取到一个对象,而filter方法可以取到多个对象get方法取不到对象的话就会报错,而filter办规律同样,它是前往一个空列表
Django中,和Model的区别django的get和filter方法是djangomodel罕用到的,搞分明两者的区别十分关键。
为了说明它们两者的区别定义2个models
classStudent():
name=(姓名,max_length=20,default=)
age=(年龄,max_length=20,default=)
classBook():
student=(Student)
一.先说下django的get方法:
1django的get方法是从数据库的取得一个婚配的结果,前往一个对象,假设记载不存在的话,它会报错。
比如我数据库里有一条记载,记载的name的值是Python的话,我用student=(name=老王python),
前往的是一个记载对象,你可以经过student.__dict__来检查,它前往的是一个字典的方式,{key:valeus},key是字段的称号,而values是值的内容。
而假设我用get方法来查问一个数据库里不存在的记载,程序会报错。
比如:student=(name=老王),你自己可以运转看下。
2假设你用django的get去取得关联表的数据的话,而关键表的数据假设多于2条的话也会报错。
比如我的student表里有一个记载:
book表:
idstudent_id
我用
student=(name=python)
book=(student)
它也会报错,由于book表有2条记载和student表相婚配。
二.再说下djangofilter:
1django的filter方法是从数据库的取得婚配的结果,前往一个对象列表,假设记载不存在的话,它会前往[]。
比如我数据库里有一条记载,记载的name的值是Python的话,我用student=(name=老王python)
它前往的student是一个对象的列表,可以看的进去student[0]和上方的get方式前往的student的结果是一样的。