使用 Django 在数据库中获取不需要的特定记录的最快方法
Posted
技术标签:
【中文标题】使用 Django 在数据库中获取不需要的特定记录的最快方法【英文标题】:Fastest way to get a not required specific record in database using Django 【发布时间】:2021-08-27 17:34:27 【问题描述】:使用 Django 获取特定记录(可能存在或不存在)的最快方法是什么。
一些可能的方法:
results = ModelExample.objects.filter(label="example1")
if(results.exists())
item = results.first()
results = ModelExample.objects.filter(label="example1")
if(len(results) > 0)
item = results.first()
*** 编辑 ***
我最初的问题并不清楚,我真正的搜索是从查询集返回的可空对象中获取属性的方法,如果对象存在,则获取属性,如果不返回 None。
我在 javascript 上寻找类似于 item?.value 的东西。
幸运的是@Willem 帮助我在接受的答案上显示 getattr(...) 函数。
【问题讨论】:
【参考方案1】:item = ModelExample.objects.filter(label="example1").first()
.first() "返回查询集匹配的第一个对象,如果没有匹配的对象则返回None。"
https://docs.djangoproject.com/en/3.2/ref/models/querysets/
【讨论】:
【参考方案2】:您可以使用.first()
。如果item不存在,会返回None
,所以:
result = ModelExample.objects.filter(label='example1').first()
if result is None:
# does not exists
# …
pass
您可以使用单线来获取属性:
result = getattr(
ModelExample.objects.filter(label='example1').first(),
'name-of-the-attribute',
None
)
【讨论】:
它有一种很好的方式从这个项目中获取一个属性,案例存在,在一行中?如果不存在则返回 None.. 类似于 item?.value 在 JavaScript 上的东西 @PatrickFreitas:您可以使用getattr(...)
。如果该属性不存在,那么这里会返回None
。
太棒了!这正是我一直在寻找的,我厌倦了一遍又一遍地验证多行中一个对象的存在。谢谢!以上是关于使用 Django 在数据库中获取不需要的特定记录的最快方法的主要内容,如果未能解决你的问题,请参考以下文章
Django-filter 在传递 filter_field 的特定值时获取所有记录
如何使用 Django 获取特定的 id 数据(多个 id 存储在列表中)